diff --git a/src/main/java/net/floodlightcontroller/restserver/IRestApiService.java b/src/main/java/net/floodlightcontroller/restserver/IRestApiService.java
index d906795..ff8b3fc 100644
--- a/src/main/java/net/floodlightcontroller/restserver/IRestApiService.java
+++ b/src/main/java/net/floodlightcontroller/restserver/IRestApiService.java
@@ -5,6 +5,7 @@
 public interface IRestApiService extends IFloodlightService {
     /**
      * Adds a REST API
+     *
      * @param routeable
      */
     public void addRestletRoutable(RestletRoutable routable);
diff --git a/src/main/java/net/floodlightcontroller/restserver/RestApiServer.java b/src/main/java/net/floodlightcontroller/restserver/RestApiServer.java
index a51e499..031a239 100644
--- a/src/main/java/net/floodlightcontroller/restserver/RestApiServer.java
+++ b/src/main/java/net/floodlightcontroller/restserver/RestApiServer.java
@@ -31,25 +31,25 @@
 import org.slf4j.LoggerFactory;
 
 public class RestApiServer
-    implements IFloodlightModule, IRestApiService {
+        implements IFloodlightModule, IRestApiService {
     protected final static Logger logger = LoggerFactory.getLogger(RestApiServer.class);
     protected List<RestletRoutable> restlets;
     protected FloodlightModuleContext fmlContext;
     protected int restPort = 8080;
     protected String numThreads = null;
-    
+
     // ***********
     // Application
     // ***********
-    
+
     protected class RestApplication extends Application {
         protected Context context;
-        
+
         public RestApplication() {
             super(new Context());
             this.context = getContext();
         }
-        
+
         @Override
         public Restlet createInboundRoot() {
             Router baseRouter = new Router(context);
@@ -58,13 +58,12 @@
                 baseRouter.attach(rr.basePath(), rr.getRestlet(context));
             }
 
-            Filter slashFilter = new Filter() {            
+            Filter slashFilter = new Filter() {
                 @Override
                 protected int beforeHandle(Request request, Response response) {
                     Reference ref = request.getResourceRef();
                     String originalPath = ref.getPath();
-                    if (originalPath.contains("//"))
-                    {
+                    if (originalPath.contains("//")) {
                         String newPath = originalPath.replaceAll("/+", "/");
                         ref.setPath(newPath);
                     }
@@ -73,10 +72,10 @@
 
             };
             slashFilter.setNext(baseRouter);
-            
+
             return slashFilter;
         }
-        
+
         public void run(FloodlightModuleContext fmlContext, int restPort) {
             setStatusService(new StatusService() {
                 @Override
@@ -84,26 +83,26 @@
                                                         Request request,
                                                         Response response) {
                     return new JacksonRepresentation<Status>(status);
-                }                
+                }
             });
-            
+
             // Add everything in the module context to the rest
             for (Class<? extends IFloodlightService> s : fmlContext.getAllServices()) {
                 if (logger.isTraceEnabled()) {
                     logger.trace("Adding {} for service {} into context",
-                                 s.getCanonicalName(), fmlContext.getServiceImpl(s));
+                            s.getCanonicalName(), fmlContext.getServiceImpl(s));
                 }
-                context.getAttributes().put(s.getCanonicalName(), 
-                                            fmlContext.getServiceImpl(s));
+                context.getAttributes().put(s.getCanonicalName(),
+                        fmlContext.getServiceImpl(s));
             }
-            
+
             // Start listening for REST requests
             try {
                 final Component component = new Component();
                 Server server = component.getServers().add(Protocol.HTTP, restPort);
-                if (numThreads != null){
-                	logger.debug("Setting number of REST API threads to {}", numThreads);
-                	server.getContext().getParameters().add("defaultThreads", numThreads);
+                if (numThreads != null) {
+                    logger.debug("Setting number of REST API threads to {}", numThreads);
+                    server.getContext().getParameters().add("defaultThreads", numThreads);
                 }
                 component.getDefaultHost().attach(this);
                 component.start();
@@ -112,11 +111,11 @@
             }
         }
     }
-    
+
     // ***************
     // IRestApiService
     // ***************
-    
+
     @Override
     public void addRestletRoutable(RestletRoutable routable) {
         restlets.add(routable);
@@ -135,15 +134,15 @@
             }
             logger.debug(sb.toString());
         }
-        
+
         RestApplication restApp = new RestApplication();
         restApp.run(fmlContext, restPort);
     }
-    
+
     // *****************
     // IFloodlightModule
     // *****************
-    
+
     @Override
     public Collection<Class<? extends IFloodlightService>> getModuleServices() {
         Collection<Class<? extends IFloodlightService>> services =
@@ -154,10 +153,10 @@
 
     @Override
     public Map<Class<? extends IFloodlightService>, IFloodlightService>
-            getServiceImpls() {
+    getServiceImpls() {
         Map<Class<? extends IFloodlightService>,
-        IFloodlightService> m = 
-            new HashMap<Class<? extends IFloodlightService>,
+                IFloodlightService> m =
+                new HashMap<Class<? extends IFloodlightService>,
                         IFloodlightService>();
         m.put(IRestApiService.class, this);
         return m;
@@ -176,7 +175,7 @@
         // startUp methods will be called
         this.restlets = new ArrayList<RestletRoutable>();
         this.fmlContext = context;
-        
+
         // read our config options
         Map<String, String> configOptions = context.getConfigParams(this);
         String port = configOptions.get("port");
@@ -184,10 +183,10 @@
             restPort = Integer.parseInt(port);
         }
         logger.debug("REST port set to {}", restPort);
-        
+
         String numThreads = configOptions.get("dispatcherthreads");
         if (numThreads != null) {
-        	this.numThreads = numThreads;
+            this.numThreads = numThreads;
         }
     }
 
diff --git a/src/main/java/net/floodlightcontroller/restserver/RestletRoutable.java b/src/main/java/net/floodlightcontroller/restserver/RestletRoutable.java
index cb7dfce..751a567 100644
--- a/src/main/java/net/floodlightcontroller/restserver/RestletRoutable.java
+++ b/src/main/java/net/floodlightcontroller/restserver/RestletRoutable.java
@@ -1,19 +1,19 @@
 /**
-*    Copyright 2011, Big Switch Networks, Inc. 
-*    Originally created by David Erickson, Stanford University
-* 
-*    Licensed under the Apache License, Version 2.0 (the "License"); you may
-*    not use this file except in compliance with the License. You may obtain
-*    a copy of the License at
-*
-*         http://www.apache.org/licenses/LICENSE-2.0
-*
-*    Unless required by applicable law or agreed to in writing, software
-*    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-*    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-*    License for the specific language governing permissions and limitations
-*    under the License.
-**/
+ *    Copyright 2011, Big Switch Networks, Inc.
+ *    Originally created by David Erickson, Stanford University
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License"); you may
+ *    not use this file except in compliance with the License. You may obtain
+ *    a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ *    License for the specific language governing permissions and limitations
+ *    under the License.
+ **/
 
 package net.floodlightcontroller.restserver;
 
@@ -22,18 +22,21 @@
 
 /**
  * Register a set of REST resources with the central controller
+ *
  * @author readams
  */
 public interface RestletRoutable {
     /**
      * Get the restlet that will map to the resources
+     *
      * @param context the context for constructing the restlet
      * @return the restlet
      */
     Restlet getRestlet(Context context);
-    
+
     /**
      * Get the base path URL where the router should be registered
+     *
      * @return the base path URL where the router should be registered
      */
     String basePath();
