diff --git a/gogo/src/main/java/org/osgi/framework/boot/SystemBundle.java b/gogo/src/main/java/org/osgi/framework/boot/SystemBundle.java
index ed58ad9..25cd373 100644
--- a/gogo/src/main/java/org/osgi/framework/boot/SystemBundle.java
+++ b/gogo/src/main/java/org/osgi/framework/boot/SystemBundle.java
@@ -18,17 +18,17 @@
  */
 package org.osgi.framework.boot;
 
-import java.util.*;
+import java.util.Properties;
 
 /**
  * This interface should be implemented by framework implementations when their
  * main object is created. It allows a configurator to set the properties and
  * launch the framework.
- * 
+ *
  * @author aqute
- * 
  */
-public interface SystemBundle {
+public interface SystemBundle
+{
     /**
      * The name of a Security Manager class with public empty constructor. A
      * valid value is also true, this means that the framework should
@@ -36,7 +36,7 @@
      * defined by a parent framework or there is no security. This can be
      * detected by looking if there is a security manager set
      */
-    String SECURITY          = "org.osgi.framework.security";
+    String SECURITY = "org.osgi.framework.security";
 
     /**
      * A valid file path in the file system to a directory that exists. The
@@ -45,52 +45,46 @@
      * should use a file area from the parent bundle. If it is not embedded, it
      * must use a reasonable platform default.
      */
-    String STORAGE           = "org.osgi.framework.storage";
+    String STORAGE = "org.osgi.framework.storage";
 
     /*
      * A list of paths (separated by path separator) that point to additional
      * directories to search for platform specific libraries
-     */
-    String LIBRARIES         = "org.osgi.framework.libraries";
+     */ String LIBRARIES = "org.osgi.framework.libraries";
     /*
      * The command to give a file executable permission. This is necessary in
      * some environments for running shared libraries.
-     */
-    String EXECPERMISSION    = "org.osgi.framework.command.execpermission";
+     */ String EXECPERMISSION = "org.osgi.framework.command.execpermission";
 
     /*
      * Points to a directory with certificates. ###??? Keystore? Certificate
      * format?
-     */
-    String ROOT_CERTIFICATES = "org.osgi.framework.root.certificates";
+     */ String ROOT_CERTIFICATES = "org.osgi.framework.root.certificates";
 
     /*
      * Set by the configurator but the framework should provide a reasonable
      * default.
-     */
-    String WINDOWSYSTEM      = "org.osgi.framework.windowsystem";
+     */ String WINDOWSYSTEM = "org.osgi.framework.windowsystem";
 
     /**
      * Configure this framework with the given properties. These properties can
      * contain framework specific properties or of the general kind defined in
      * the specification or in this interface.
-     * 
-     * @param properties
-     *            The properties. This properties can be backed by another
-     *            properties, it can there not be assumed that it contains all
-     *            keys. Use it only through the getProperty methods. This parameter may be null.
-     * 
+     *
+     * @param properties The properties. This properties can be backed by another
+     *                   properties, it can there not be assumed that it contains all
+     *                   keys. Use it only through the getProperty methods. This parameter may be null.
      */
     void init(Properties configuration);
 
     /**
      * Wait until the framework is completely finished.
-     * 
+     * <p/>
      * This method will return if the framework is stopped and has cleaned up
-     * all the framework resources. 
-     * 
+     * all the framework resources.
+     *
      * @param timeout Maximum number of milliseconds to wait until the framework is finished. Specifying a zero will wait indefinitely.
      */
-    
+
     void join(long timeout) throws InterruptedException;
 }
diff --git a/gogo/src/main/java/org/osgi/service/command/CommandProcessor.java b/gogo/src/main/java/org/osgi/service/command/CommandProcessor.java
index dba883d..b997845 100644
--- a/gogo/src/main/java/org/osgi/service/command/CommandProcessor.java
+++ b/gogo/src/main/java/org/osgi/service/command/CommandProcessor.java
@@ -18,49 +18,47 @@
  */
 package org.osgi.service.command;
 
-import java.io.*;
+import java.io.InputStream;
+import java.io.PrintStream;
 
 /**
  * A command shell can create and maintain a number of command sessions.
- * 
+ *
  * @author aqute
- * 
  */
-public interface CommandProcessor {
-	/**
-	 * The scope of commands provided by this service. This name can be used to distinguish
-	 * between different command providers with the same function names.
-	 */
-	final static String	COMMAND_SCOPE		= "osgi.command.scope";
+public interface CommandProcessor
+{
+    /**
+     * The scope of commands provided by this service. This name can be used to distinguish
+     * between different command providers with the same function names.
+     */
+    final static String COMMAND_SCOPE = "osgi.command.scope";
 
-	/**
-	 * A list of method names that may be called for this command provider. A
-	 * name may end with a *, this will then be calculated from all declared public
-	 * methods in this service.
-	 * 
-	 * Help information for the command may be supplied with a space as
-	 * separation.
-	 */
-	final static String	COMMAND_FUNCTION	= "osgi.command.function";
+    /**
+     * A list of method names that may be called for this command provider. A
+     * name may end with a *, this will then be calculated from all declared public
+     * methods in this service.
+     * <p/>
+     * Help information for the command may be supplied with a space as
+     * separation.
+     */
+    final static String COMMAND_FUNCTION = "osgi.command.function";
 
-	/**
-	 * Create a new command session associated with IO streams.
-	 * 
-	 * The session is bound to the life cycle of the bundle getting this
-	 * service. The session will be automatically closed when this bundle is
-	 * stopped or the service is returned.
-	 * 
-	 * The shell will provide any available commands to this session and
-	 * can set additional variables.
-	 * 
-	 * @param in
-	 *            The value used for System.in
-	 * @param out
-	 *            The stream used for System.out
-	 * @param err
-	 *            The stream used for System.err
-	 * @return A new session.
-	 */
-	CommandSession createSession(InputStream in, PrintStream out,
+    /**
+     * Create a new command session associated with IO streams.
+     * <p/>
+     * The session is bound to the life cycle of the bundle getting this
+     * service. The session will be automatically closed when this bundle is
+     * stopped or the service is returned.
+     * <p/>
+     * The shell will provide any available commands to this session and
+     * can set additional variables.
+     *
+     * @param in  The value used for System.in
+     * @param out The stream used for System.out
+     * @param err The stream used for System.err
+     * @return A new session.
+     */
+    CommandSession createSession(InputStream in, PrintStream out,
 			PrintStream err);
 }
diff --git a/gogo/src/main/java/org/osgi/service/command/CommandSession.java b/gogo/src/main/java/org/osgi/service/command/CommandSession.java
index fecc242..293c612 100644
--- a/gogo/src/main/java/org/osgi/service/command/CommandSession.java
+++ b/gogo/src/main/java/org/osgi/service/command/CommandSession.java
@@ -18,75 +18,75 @@
  */
 package org.osgi.service.command;
 
-import java.io.*;
+import java.io.InputStream;
+import java.io.PrintStream;
 
-public interface CommandSession {
-	/**
-	 * Execute a program in this session.
-	 * 
-	 * @param commandline 
-	 * @return the result of the execution
-	 */
-	Object execute(CharSequence commandline) throws Exception;
+public interface CommandSession
+{
+    /**
+     * Execute a program in this session.
+     *
+     * @param commandline
+     * @return the result of the execution
+     */
+    Object execute(CharSequence commandline) throws Exception;
 
-	/**
-	 * Close this command session. After the session is closed, it will throw
-	 * IllegalStateException when it is used.
-	 * 
-	 * @param
-	 */
-	void close();
+    /**
+     * Close this command session. After the session is closed, it will throw
+     * IllegalStateException when it is used.
+     *
+     * @param
+     */
+    void close();
 
-	/**
-	 * Return the input stream that is the first of the pipeline. This stream is
-	 * sometimes necessary to communicate directly to the end user. For example,
-	 * a "less" or "more" command needs direct input from the keyboard to
-	 * control the paging.
-	 * 
-	 * @return InpuStream used closest to the user or null if input is from a
-	 *         file.
-	 */
-	InputStream getKeyboard();
+    /**
+     * Return the input stream that is the first of the pipeline. This stream is
+     * sometimes necessary to communicate directly to the end user. For example,
+     * a "less" or "more" command needs direct input from the keyboard to
+     * control the paging.
+     *
+     * @return InpuStream used closest to the user or null if input is from a
+     *         file.
+     */
+    InputStream getKeyboard();
 
-	/**
-	 * Return the PrintStream for the console. This must always be the stream
-	 * "closest" to the user. This stream can be used to post messages that
-	 * bypass the piping. If the output is piped to a file, then the object
-	 * returned must be null.
-	 * 
-	 * @return
-	 */
-	PrintStream getConsole();
+    /**
+     * Return the PrintStream for the console. This must always be the stream
+     * "closest" to the user. This stream can be used to post messages that
+     * bypass the piping. If the output is piped to a file, then the object
+     * returned must be null.
+     *
+     * @return
+     */
+    PrintStream getConsole();
 
-	/**
-	 * Get the value of a variable.
-	 * 
-	 * @param name
-	 * @return
-	 */
-	Object get(String name);
+    /**
+     * Get the value of a variable.
+     *
+     * @param name
+     * @return
+     */
+    Object get(String name);
 
-	/**
-	 * Set the value of a variable.
-	 * 
-	 * @param name
-	 *            Name of the variable.
-	 * @param value
-	 *            Value of the variable
-	 */
-	void put(String name, Object value);
+    /**
+     * Set the value of a variable.
+     *
+     * @param name  Name of the variable.
+     * @param value Value of the variable
+     */
+    void put(String name, Object value);
 
-	/**
-	 * Convert an object to string form (CharSequence). The level is defined in
-	 * the Converter interface, it can be one of INSPECT, LINE, PART. This
-	 * function always returns a non null value. As a last resort, toString is
-	 * called on the Object.
-	 * 
-	 * @param target
-	 * @param level
-	 * @return
-	 */
-	CharSequence format(Object target, int level);
+    /**
+     * Convert an object to string form (CharSequence). The level is defined in
+     * the Converter interface, it can be one of INSPECT, LINE, PART. This
+     * function always returns a non null value. As a last resort, toString is
+     * called on the Object.
+     *
+     * @param target
+     * @param level
+     * @return
+     */
+    CharSequence format(Object target, int level);
 
 	/**
 	 * Convert an object to another type.
diff --git a/gogo/src/main/java/org/osgi/service/command/Converter.java b/gogo/src/main/java/org/osgi/service/command/Converter.java
index 9f57481..7ca29d4 100644
--- a/gogo/src/main/java/org/osgi/service/command/Converter.java
+++ b/gogo/src/main/java/org/osgi/service/command/Converter.java
@@ -22,70 +22,65 @@
 /**
  * A converter is a service that can help create specific object types from a
  * string, and vice versa.
- * 
+ * <p/>
  * The shell is capable of coercing arguments to the their proper type. However,
  * sometimes commands require extra help to do this conversion. This service can
  * implement a converter for a number of types.
- * 
+ * <p/>
  * The command shell will rank these services in order of service.ranking and
  * will then call them until one of the converters succeeds.
- * 
  */
-public interface Converter {
-	/**
-	 * This property is a string, or array of strings, and defines the classes
-	 * or interfaces that this converter recognizes. Recognized classes can be
-	 * converted from a string to a class and they can be printed in 3 different
-	 * modes.
-	 */
-	String	CONVERTER_CLASSES	= "osgi.converter.classes";
+public interface Converter
+{
+    /**
+     * This property is a string, or array of strings, and defines the classes
+     * or interfaces that this converter recognizes. Recognized classes can be
+     * converted from a string to a class and they can be printed in 3 different
+     * modes.
+     */
+    String CONVERTER_CLASSES = "osgi.converter.classes";
 
-	/**
-	 * Print the object in detail. This can contain multiple lines.
-	 */
-	int		INSPECT				= 0;
+    /**
+     * Print the object in detail. This can contain multiple lines.
+     */
+    int INSPECT = 0;
 
-	/**
-	 * Print the object as a row in a table. The columns should align for
-	 * multiple objects printed beneath each other. The print may run over
-	 * multiple lines but must not end in a CR.
-	 */
-	int		LINE				= 1;
+    /**
+     * Print the object as a row in a table. The columns should align for
+     * multiple objects printed beneath each other. The print may run over
+     * multiple lines but must not end in a CR.
+     */
+    int LINE = 1;
 
-	/**
-	 * Print the value in a small format so that it is identifiable. This
-	 * printed format must be recognizable by the conversion method.
-	 */
-	int		PART				= 2;
+    /**
+     * Print the value in a small format so that it is identifiable. This
+     * printed format must be recognizable by the conversion method.
+     */
+    int PART = 2;
 
-	/**
-	 * Convert an object to the desired type.
-	 * 
-	 * Return null if the conversion can not be done. Otherwise return and
-	 * object that extends the desired type or implements it.
-	 * 
-	 * @param desiredType
-	 *            The type that the returned object can be assigned to
-	 * @param in
-	 *            The object that must be converted
-	 * @return An object that can be assigned to the desired type or null.
-	 * @throws Exception
-	 */
-	Object convert(Class<?> desiredType, Object in) throws Exception;
+    /**
+     * Convert an object to the desired type.
+     * <p/>
+     * Return null if the conversion can not be done. Otherwise return and
+     * object that extends the desired type or implements it.
+     *
+     * @param desiredType The type that the returned object can be assigned to
+     * @param in          The object that must be converted
+     * @return An object that can be assigned to the desired type or null.
+     * @throws Exception
+     */
+    Object convert(Class<?> desiredType, Object in) throws Exception;
 
-	/**
-	 * Convert an objet to a CharSequence object in the requested format. The
-	 * format can be INSPECT, LINE, or PART. Other values must throw
-	 * IllegalArgumentException.
-	 * 
-	 * @param target
-	 *            The object to be converted to a String
-	 * @param level
-	 *            One of INSPECT, LINE, or PART.
-	 * @param escape
-	 *            Use this object to format sub ordinate objects.
-	 * @return A printed object of potentially multiple lines
-	 * @throws Exception 
-	 */
-	CharSequence format(Object target, int level, Converter escape) throws Exception;
+    /**
+     * Convert an objet to a CharSequence object in the requested format. The
+     * format can be INSPECT, LINE, or PART. Other values must throw
+     * IllegalArgumentException.
+     *
+     * @param target The object to be converted to a String
+     * @param level  One of INSPECT, LINE, or PART.
+     * @param escape Use this object to format sub ordinate objects.
+     * @return A printed object of potentially multiple lines
+     * @throws Exception
+     */
+    CharSequence format(Object target, int level, Converter escape) throws Exception;
 }
diff --git a/gogo/src/main/java/org/osgi/service/command/Function.java b/gogo/src/main/java/org/osgi/service/command/Function.java
index 81f175e..a282d80 100644
--- a/gogo/src/main/java/org/osgi/service/command/Function.java
+++ b/gogo/src/main/java/org/osgi/service/command/Function.java
@@ -18,21 +18,19 @@
  */
 package org.osgi.service.command;
 
-import java.util.*;
+import java.util.List;
 
 /**
  * A Function is a a block of code that can be executed with a set of arguments,
  * it returns the result object of executing the script.
  */
-public interface Function {
-	/**
-	 * Execute this function and return the result.
-	 * 
-	 * @return the result from the execution.
-	 * 
-	 * @throws Exception
-	 *             if anything goes terribly wrong
-	 */
-	Object execute(CommandSession session, List<Object> arguments)
-			throws Exception;
+public interface Function
+{
+    /**
+     * Execute this function and return the result.
+     *
+     * @return the result from the execution.
+     * @throws Exception if anything goes terribly wrong
+     */
+    Object execute(CommandSession session, List<Object> arguments) throws Exception;
 }
diff --git a/gogo/src/main/java/org/osgi/service/threadio/ThreadIO.java b/gogo/src/main/java/org/osgi/service/threadio/ThreadIO.java
index 765f594..682e833 100644
--- a/gogo/src/main/java/org/osgi/service/threadio/ThreadIO.java
+++ b/gogo/src/main/java/org/osgi/service/threadio/ThreadIO.java
@@ -18,39 +18,40 @@
  */
 package org.osgi.service.threadio;
 
-import java.io.*;
+import java.io.InputStream;
+import java.io.PrintStream;
 
 /**
  * Enable multiplexing of the standard IO streams for input, output, and error.
- * 
+ * <p/>
  * This service guards the central resource of IO streams. The standard streams
  * are singletons. This service replaces the singletons with special versions that
  * can find a unique stream for each thread. If no stream is associated with a
  * thread, it will use the standard input/output that was originally set.
- * 
- * @author aqute
  *
+ * @author aqute
  */
-public interface ThreadIO {
-	/**
-	 * Associate this streams with the current thread.
-	 * 
-	 * Ensure that when output is performed on System.in, System.out, System.err it
-	 * will happen on the given streams. 
-	 * 
-	 * The streams will automatically be canceled when the bundle that has gotten
-	 * this service is stopped or returns this service.
-	 * 
-	 * @param in InputStream to use for the current thread when System.in is used
-	 * @param out PrintStream to use for the current thread when System.out is used
-	 * @param err PrintStream to use for the current thread when System.err is used
-	 */
-	void setStreams(InputStream in, PrintStream out, PrintStream err);
+public interface ThreadIO
+{
+    /**
+     * Associate this streams with the current thread.
+     * <p/>
+     * Ensure that when output is performed on System.in, System.out, System.err it
+     * will happen on the given streams.
+     * <p/>
+     * The streams will automatically be canceled when the bundle that has gotten
+     * this service is stopped or returns this service.
+     *
+     * @param in  InputStream to use for the current thread when System.in is used
+     * @param out PrintStream to use for the current thread when System.out is used
+     * @param err PrintStream to use for the current thread when System.err is used
+     */
+    void setStreams(InputStream in, PrintStream out, PrintStream err);
 
-	/**
-	 * Cancel the streams associated with the current thread.
-	 * 
-	 * This method will not do anything when no streams are associated.
-	 */
+    /**
+     * Cancel the streams associated with the current thread.
+     * <p/>
+     * This method will not do anything when no streams are associated.
+     */
 	void close();
 }
