diff --git a/src/main/java/net/onrc/onos/apps/bgproute/BgpRoute.java b/src/main/java/net/onrc/onos/apps/bgproute/BgpRoute.java
index b1100ee..c34e773 100644
--- a/src/main/java/net/onrc/onos/apps/bgproute/BgpRoute.java
+++ b/src/main/java/net/onrc/onos/apps/bgproute/BgpRoute.java
@@ -500,7 +500,7 @@
 
     /**
      * Add a flow to match dst-IP prefix and rewrite MAC for one IP prefix
-     * to all other border switches
+     * to all other border switches.
      */
     private void addPrefixFlows(Prefix prefix, Interface egressInterface,
                                 MACAddress nextHopMacAddress) {
@@ -682,7 +682,7 @@
 
     /**
      * On startup, we need to calculate a full mesh of paths between all gateway
-     * switches
+     * switches.
      */
     private void setupFullMesh() {
         //For each border router, calculate and install a path from every other
@@ -799,7 +799,7 @@
 
     /**
      * Proactively install all BGP traffic paths from BGP host attachment point
-     * in SDN network to all the virtual gateways to BGP peers in other networks
+     * in SDN network to all the virtual gateways to BGP peers in other networks.
      */
     private void setupBgpPaths() {
 
diff --git a/src/main/java/net/onrc/onos/apps/bgproute/IBgpRouteService.java b/src/main/java/net/onrc/onos/apps/bgproute/IBgpRouteService.java
index 95b81bf..04223eb 100644
--- a/src/main/java/net/onrc/onos/apps/bgproute/IBgpRouteService.java
+++ b/src/main/java/net/onrc/onos/apps/bgproute/IBgpRouteService.java
@@ -16,7 +16,7 @@
     public void clearPtree();
 
     /**
-     * Pass a RIB update to the {@link IBgpRouteService}
+     * Pass a RIB update to the {@link IBgpRouteService}.
      *
      * @param update
      */
diff --git a/src/main/java/net/onrc/onos/core/datagrid/web/DatagridWebRoutable.java b/src/main/java/net/onrc/onos/core/datagrid/web/DatagridWebRoutable.java
index 672f66d..90fad3a 100755
--- a/src/main/java/net/onrc/onos/core/datagrid/web/DatagridWebRoutable.java
+++ b/src/main/java/net/onrc/onos/core/datagrid/web/DatagridWebRoutable.java
@@ -28,7 +28,7 @@
     }
 
     /**
-     * Set the base path for the Topology
+     * Set the base path for the Topology.
      */
     @Override
     public String basePath() {
diff --git a/src/main/java/net/onrc/onos/core/datastore/IKVClient.java b/src/main/java/net/onrc/onos/core/datastore/IKVClient.java
index 50bdf92..0fa1cbd 100644
--- a/src/main/java/net/onrc/onos/core/datastore/IKVClient.java
+++ b/src/main/java/net/onrc/onos/core/datastore/IKVClient.java
@@ -6,7 +6,7 @@
 import net.onrc.onos.core.datastore.IKVTable.IKVEntry;
 
 /**
- * Interface for a client class used to access the Key-Value store
+ * Interface for a client class used to access the Key-Value store.
  */
 public interface IKVClient {
 
@@ -85,7 +85,7 @@
     // give an option to improve performance on some backends.
 
     /**
-     * Remove an existing Key-Value entry in table
+     * Remove an existing Key-Value entry in table.
      *
      * @param tableId
      * @param key
@@ -98,7 +98,7 @@
             throws ObjectDoesntExistException, WrongVersionException;
 
     /**
-     * Remove a Key-Value entry in table
+     * Remove a Key-Value entry in table.
      *
      * @param tableId
      * @param key
@@ -134,7 +134,7 @@
     public IMultiEntryOperation forceDeleteOp(IKVTableID tableId, byte[] key);
 
     /**
-     * Batch delete operation
+     * Batch delete operation.
      *
      * @param ops delete operations
      * @return true if failed operation exists
@@ -142,7 +142,7 @@
     public boolean multiDelete(final Collection<IMultiEntryOperation> ops);
 
     /**
-     * Batch write operation
+     * Batch write operation.
      *
      * @param ops write operations
      * @return true if failed operation exists
@@ -150,7 +150,7 @@
     public boolean multiWrite(final List<IMultiEntryOperation> ops);
 
     /**
-     * Batch read operation
+     * Batch read operation.
      *
      * @param ops read operations
      * @return true if failed operation exists
diff --git a/src/main/java/net/onrc/onos/core/datastore/IKVTable.java b/src/main/java/net/onrc/onos/core/datastore/IKVTable.java
index 95e0027..87fee25 100644
--- a/src/main/java/net/onrc/onos/core/datastore/IKVTable.java
+++ b/src/main/java/net/onrc/onos/core/datastore/IKVTable.java
@@ -2,7 +2,7 @@
 
 
 /**
- * Interface for a class to represent a Table in a Key-Value store
+ * Interface for a class to represent a Table in a Key-Value store.
  */
 public interface IKVTable {
 
@@ -83,7 +83,7 @@
             throws ObjectDoesntExistException;
 
     /**
-     * Remove an existing Key-Value entry in table
+     * Remove an existing Key-Value entry in table.
      *
      * @param key
      * @param version expected version in the data store
@@ -95,7 +95,7 @@
             throws ObjectDoesntExistException, WrongVersionException;
 
     /**
-     * Remove a Key-Value entry in table
+     * Remove a Key-Value entry in table.
      *
      * @param key
      * @return version of removed object or VERSION_NONEXISTENT, if it did not exist.
diff --git a/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCTable.java b/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCTable.java
index e5a6675..f7bafd5 100644
--- a/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCTable.java
+++ b/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCTable.java
@@ -10,7 +10,7 @@
 import org.slf4j.LoggerFactory;
 
 /**
- * Class to represent a Table in RAMCloud
+ * Class to represent a Table in RAMCloud.
  */
 public class RCTable implements IKVTable {
     @SuppressWarnings("unused")
diff --git a/src/main/java/net/onrc/onos/core/datastore/utils/KVObject.java b/src/main/java/net/onrc/onos/core/datastore/utils/KVObject.java
index c696bd7..568cfc7 100644
--- a/src/main/java/net/onrc/onos/core/datastore/utils/KVObject.java
+++ b/src/main/java/net/onrc/onos/core/datastore/utils/KVObject.java
@@ -54,7 +54,7 @@
     private long version;
 
     /**
-     * Map to store user-defined properties
+     * Map to store user-defined properties.
      */
     private Map<Object, Object> propertyMap;
 
@@ -333,7 +333,7 @@
     }
 
     /**
-     * TODO Extract common interface
+     * TODO Extract common interface.
      */
     public static class WriteOp implements IMultiObjectOperation, IModifiableMultiEntryOperation {
 
diff --git a/src/main/java/net/onrc/onos/core/devicemanager/IOnosDeviceService.java b/src/main/java/net/onrc/onos/core/devicemanager/IOnosDeviceService.java
index 9eb6e31..e0ab4f6 100644
--- a/src/main/java/net/onrc/onos/core/devicemanager/IOnosDeviceService.java
+++ b/src/main/java/net/onrc/onos/core/devicemanager/IOnosDeviceService.java
@@ -6,7 +6,7 @@
 /**
  * {@link OnosDeviceManager} doesn't yet provide any API to fellow modules,
  * however making it export a dummy service means we can specify it as
- * a dependency of Forwarding
+ * a dependency of Forwarding.
  *
  * @author jono
  */
diff --git a/src/main/java/net/onrc/onos/core/devicemanager/OnosDevice.java b/src/main/java/net/onrc/onos/core/devicemanager/OnosDevice.java
index 09dea03..f5a405d 100644
--- a/src/main/java/net/onrc/onos/core/devicemanager/OnosDevice.java
+++ b/src/main/java/net/onrc/onos/core/devicemanager/OnosDevice.java
@@ -41,35 +41,35 @@
     private static int ACTIVITY_TIMEOUT = 30000;
 
     /**
-     * The MAC address associated with this entity
+     * The MAC address associated with this entity.
      */
     private MACAddress macAddress;
 
     /**
      * The IP address associated with this entity, or null if no IP learned
-     * from the network observation associated with this entity
+     * from the network observation associated with this entity.
      */
     private Integer ipv4Address;
 
     /**
-     * The VLAN tag on this entity, or null if untagged
+     * The VLAN tag on this entity, or null if untagged.
      */
     private Short vlan;
 
     /**
      * The DPID of the switch for the ingress point for this entity,
-     * or null if not present
+     * or null if not present.
      */
     private long switchDPID;
 
     /**
      * The port number of the switch for the ingress point for this entity,
-     * or null if not present
+     * or null if not present.
      */
     private short switchPort;
 
     /**
-     * The last time we observed this entity on the network
+     * The last time we observed this entity on the network.
      */
     private Date lastSeenTimestamp;
 
@@ -84,7 +84,7 @@
     }
 
     /**
-     * Create a new entity
+     * Create a new entity.
      *
      * @param macAddress
      * @param vlan
diff --git a/src/main/java/net/onrc/onos/core/devicemanager/OnosDeviceManager.java b/src/main/java/net/onrc/onos/core/devicemanager/OnosDeviceManager.java
index 231c1a0..ae4202a 100644
--- a/src/main/java/net/onrc/onos/core/devicemanager/OnosDeviceManager.java
+++ b/src/main/java/net/onrc/onos/core/devicemanager/OnosDeviceManager.java
@@ -208,7 +208,7 @@
 
     /**
      * Get IP address from packet if the packet is either an ARP
-     * or a DHCP packet
+     * or a DHCP packet.
      *
      * @param eth
      * @param dlAddr
diff --git a/src/main/java/net/onrc/onos/core/flowprogrammer/FlowPusher.java b/src/main/java/net/onrc/onos/core/flowprogrammer/FlowPusher.java
index 8098792..b9b093f 100644
--- a/src/main/java/net/onrc/onos/core/flowprogrammer/FlowPusher.java
+++ b/src/main/java/net/onrc/onos/core/flowprogrammer/FlowPusher.java
@@ -136,7 +136,7 @@
         }
 
         /**
-         * Check if sending rate is within the rate
+         * Check if sending rate is within the rate.
          *
          * @param current Current time
          * @return true if within the rate
@@ -205,7 +205,7 @@
         }
 
         /**
-         * Check if this object has any messages in the queues to be sent
+         * Check if this object has any messages in the queues to be sent.
          *
          * @return True if there are some messages to be sent.
          */
@@ -939,7 +939,7 @@
     }
 
     /**
-     * Add message to queue
+     * Add message to queue.
      *
      * @param sw
      * @param msg
diff --git a/src/main/java/net/onrc/onos/core/flowprogrammer/FlowSynchronizer.java b/src/main/java/net/onrc/onos/core/flowprogrammer/FlowSynchronizer.java
index 005f983..ab3776c 100644
--- a/src/main/java/net/onrc/onos/core/flowprogrammer/FlowSynchronizer.java
+++ b/src/main/java/net/onrc/onos/core/flowprogrammer/FlowSynchronizer.java
@@ -353,7 +353,7 @@
         }
 
         /**
-         * Return the hash code of the Flow Entry ID
+         * Return the hash code of the Flow Entry ID.
          */
         @Override
         public int hashCode() {
diff --git a/src/main/java/net/onrc/onos/core/intent/ConstrainedShortestPathIntent.java b/src/main/java/net/onrc/onos/core/intent/ConstrainedShortestPathIntent.java
index 7f3de9b..1e025b5 100644
--- a/src/main/java/net/onrc/onos/core/intent/ConstrainedShortestPathIntent.java
+++ b/src/main/java/net/onrc/onos/core/intent/ConstrainedShortestPathIntent.java
@@ -7,7 +7,7 @@
     protected double bandwidth;
 
     /**
-     * Default constructor for Kryo deserialization
+     * Default constructor for Kryo deserialization.
      */
     protected ConstrainedShortestPathIntent() {
     }
diff --git a/src/main/java/net/onrc/onos/core/intent/ErrorIntent.java b/src/main/java/net/onrc/onos/core/intent/ErrorIntent.java
index 31715a8..44ef6c3 100644
--- a/src/main/java/net/onrc/onos/core/intent/ErrorIntent.java
+++ b/src/main/java/net/onrc/onos/core/intent/ErrorIntent.java
@@ -1,7 +1,7 @@
 package net.onrc.onos.core.intent;
 
 /**
- * This class is instantiated by Run-times to express intent calculation error
+ * This class is instantiated by Run-times to express intent calculation error.
  *
  * @author Toshio Koide (t-koide@onlab.us)
  */
@@ -17,7 +17,7 @@
     public Intent parentIntent;
 
     /**
-     * Default constructor for Kryo deserialization
+     * Default constructor for Kryo deserialization.
      */
     protected ErrorIntent() {
     }
diff --git a/src/main/java/net/onrc/onos/core/intent/Intent.java b/src/main/java/net/onrc/onos/core/intent/Intent.java
index 27067b3..f90b6b0 100644
--- a/src/main/java/net/onrc/onos/core/intent/Intent.java
+++ b/src/main/java/net/onrc/onos/core/intent/Intent.java
@@ -27,7 +27,7 @@
     private LinkedList<String> logs = new LinkedList<>();
 
     /**
-     * Default constructor for Kryo deserialization
+     * Default constructor for Kryo deserialization.
      */
     protected Intent() {
         logs.add(String.format("created, time:%d", System.nanoTime())); // for measurement
diff --git a/src/main/java/net/onrc/onos/core/intent/PathIntent.java b/src/main/java/net/onrc/onos/core/intent/PathIntent.java
index 633fe8b..b936ea4 100644
--- a/src/main/java/net/onrc/onos/core/intent/PathIntent.java
+++ b/src/main/java/net/onrc/onos/core/intent/PathIntent.java
@@ -20,7 +20,7 @@
     }
 
     /**
-     * Default constructor for Kryo deserialization
+     * Default constructor for Kryo deserialization.
      */
     protected PathIntent() {
     }
diff --git a/src/main/java/net/onrc/onos/core/intent/PathIntentMap.java b/src/main/java/net/onrc/onos/core/intent/PathIntentMap.java
index f97b4c1..de1f6e2 100644
--- a/src/main/java/net/onrc/onos/core/intent/PathIntentMap.java
+++ b/src/main/java/net/onrc/onos/core/intent/PathIntentMap.java
@@ -92,7 +92,7 @@
     }
 
     /**
-     * calculate available bandwidth of specified link
+     * calculate available bandwidth of specified link.
      *
      * @param link
      * @return
diff --git a/src/main/java/net/onrc/onos/core/intent/ShortestPathIntent.java b/src/main/java/net/onrc/onos/core/intent/ShortestPathIntent.java
index 3adc756..38892b2 100644
--- a/src/main/java/net/onrc/onos/core/intent/ShortestPathIntent.java
+++ b/src/main/java/net/onrc/onos/core/intent/ShortestPathIntent.java
@@ -16,7 +16,7 @@
     protected String pathIntentId = null;
 
     /**
-     * Default constructor for Kryo deserialization
+     * Default constructor for Kryo deserialization.
      */
     protected ShortestPathIntent() {
     }
diff --git a/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntime.java b/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntime.java
index 5a6d2e9..ee28b4b 100644
--- a/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntime.java
+++ b/src/main/java/net/onrc/onos/core/intent/runtime/PathCalcRuntime.java
@@ -35,7 +35,7 @@
     }
 
     /**
-     * calculate shortest-path and constrained-shortest-path intents into low-level path intents
+     * calculate shortest-path and constrained-shortest-path intents into low-level path intents.
      *
      * @param intentOpList IntentOperationList having instances of ShortestPathIntent/ConstrainedShortestPathIntent
      * @param pathIntents  a set of current low-level intents
diff --git a/src/main/java/net/onrc/onos/core/linkdiscovery/ILinkDiscoveryService.java b/src/main/java/net/onrc/onos/core/linkdiscovery/ILinkDiscoveryService.java
index 14e78d8..c5543a2 100644
--- a/src/main/java/net/onrc/onos/core/linkdiscovery/ILinkDiscoveryService.java
+++ b/src/main/java/net/onrc/onos/core/linkdiscovery/ILinkDiscoveryService.java
@@ -31,7 +31,7 @@
     public Map<Link, LinkInfo> getLinks();
 
     /**
-     * Returns link type of a given link
+     * Returns link type of a given link.
      *
      * @param info
      * @return
@@ -45,7 +45,7 @@
     public Map<Long, Set<Link>> getSwitchLinks();
 
     /**
-     * Adds a listener to listen for ILinkDiscoveryService messages
+     * Adds a listener to listen for ILinkDiscoveryService messages.
      *
      * @param listener The listener that wants the notifications
      */
@@ -57,17 +57,17 @@
     public Set<NodePortTuple> getSuppressLLDPsInfo();
 
     /**
-     * Adds a switch port to suppress lldp set
+     * Adds a switch port to suppress lldp set.
      */
     public void addToSuppressLLDPs(long sw, short port);
 
     /**
-     * Removes a switch port from suppress lldp set
+     * Removes a switch port from suppress lldp set.
      */
     public void removeFromSuppressLLDPs(long sw, short port);
 
     /**
-     * Get the set of quarantined ports on a switch
+     * Get the set of quarantined ports on a switch.
      */
     public Set<Short> getQuarantinedPorts(long sw);
 
diff --git a/src/main/java/net/onrc/onos/core/linkdiscovery/NodePortTuple.java b/src/main/java/net/onrc/onos/core/linkdiscovery/NodePortTuple.java
index 224ca3a..c586ecc 100644
--- a/src/main/java/net/onrc/onos/core/linkdiscovery/NodePortTuple.java
+++ b/src/main/java/net/onrc/onos/core/linkdiscovery/NodePortTuple.java
@@ -19,7 +19,7 @@
     protected short portId; // switch port id
 
     /**
-     * Creates a NodePortTuple
+     * Creates a NodePortTuple.
      *
      * @param nodeId The DPID of the switch
      * @param portId The port of the switch
@@ -91,7 +91,7 @@
     /**
      * API to return a String value formed wtih NodeID and PortID
      * The portID is a 16-bit field, so mask it as an integer to get full
-     * positive value
+     * positive value.
      *
      * @return
      */
diff --git a/src/main/java/net/onrc/onos/core/linkdiscovery/internal/EventHistoryTopologyCluster.java b/src/main/java/net/onrc/onos/core/linkdiscovery/internal/EventHistoryTopologyCluster.java
index e37252d..12ed97b 100644
--- a/src/main/java/net/onrc/onos/core/linkdiscovery/internal/EventHistoryTopologyCluster.java
+++ b/src/main/java/net/onrc/onos/core/linkdiscovery/internal/EventHistoryTopologyCluster.java
@@ -6,7 +6,7 @@
 import org.codehaus.jackson.map.annotate.JsonSerialize;
 
 /**
- * Topology Cluster merge/split event history related classes and members
+ * Topology Cluster merge/split event history related classes and members.
  *
  * @author subrata
  */
diff --git a/src/main/java/net/onrc/onos/core/linkdiscovery/internal/EventHistoryTopologyLink.java b/src/main/java/net/onrc/onos/core/linkdiscovery/internal/EventHistoryTopologyLink.java
index f172fdd..50c6c7e 100644
--- a/src/main/java/net/onrc/onos/core/linkdiscovery/internal/EventHistoryTopologyLink.java
+++ b/src/main/java/net/onrc/onos/core/linkdiscovery/internal/EventHistoryTopologyLink.java
@@ -6,7 +6,7 @@
 import org.codehaus.jackson.map.annotate.JsonSerialize;
 
 /**
- * Topology link up/down event history related classes and members
+ * Topology link up/down event history related classes and members.
  *
  * @author subrata
  */
diff --git a/src/main/java/net/onrc/onos/core/linkdiscovery/internal/EventHistoryTopologySwitch.java b/src/main/java/net/onrc/onos/core/linkdiscovery/internal/EventHistoryTopologySwitch.java
index 7d0503f..456f176 100644
--- a/src/main/java/net/onrc/onos/core/linkdiscovery/internal/EventHistoryTopologySwitch.java
+++ b/src/main/java/net/onrc/onos/core/linkdiscovery/internal/EventHistoryTopologySwitch.java
@@ -7,7 +7,7 @@
 import org.codehaus.jackson.map.annotate.JsonSerialize;
 
 /**
- * Topology Switch event history related classes and members
+ * Topology Switch event history related classes and members.
  *
  * @author subrata
  */
diff --git a/src/main/java/net/onrc/onos/core/linkdiscovery/internal/LinkDiscoveryManager.java b/src/main/java/net/onrc/onos/core/linkdiscovery/internal/LinkDiscoveryManager.java
index 4cb8bc7..9b913c1 100644
--- a/src/main/java/net/onrc/onos/core/linkdiscovery/internal/LinkDiscoveryManager.java
+++ b/src/main/java/net/onrc/onos/core/linkdiscovery/internal/LinkDiscoveryManager.java
@@ -101,14 +101,14 @@
  * <p/>
  * Invariants:
  * -portLinks and switchLinks will not contain empty Sets outside of
- * critical sections
+ * critical sections.
  * -portLinks contains LinkTuples where one of the src or dst
- * SwitchPortTuple matches the map key
+ * SwitchPortTuple matches the map key.
  * -switchLinks contains LinkTuples where one of the src or dst
- * SwitchPortTuple's id matches the switch id
+ * SwitchPortTuple's id matches the switch id.
  * -Each LinkTuple will be indexed into switchLinks for both
- * src.id and dst.id, and portLinks for each src and dst
- * -The updates queue is only added to from within a held write lock
+ * src.id and dst.id, and portLinks for each src and dst.
+ * -The updates queue is only added to from within a held write lock.
  */
 @LogMessageCategory("Network Topology")
 public class LinkDiscoveryManager
@@ -181,17 +181,17 @@
     protected Map<Long, IOnosRemoteSwitch> remoteSwitches;
 
     /**
-     * Map from link to the most recent time it was verified functioning
+     * Map from link to the most recent time it was verified functioning.
      */
     protected Map<Link, LinkInfo> links;
 
     /**
-     * Map from switch id to a set of all links with it as an endpoint
+     * Map from switch id to a set of all links with it as an endpoint.
      */
     protected Map<Long, Set<Link>> switchLinks;
 
     /**
-     * Map from a id:port to the set of links containing it as an endpoint
+     * Map from a id:port to the set of links containing it as an endpoint.
      */
     protected Map<NodePortTuple, Set<Link>> portLinks;
 
@@ -203,8 +203,10 @@
 
     protected volatile boolean shuttingDown = false;
 
-    /* topology aware components are called in the order they were added to the
-     * the array */
+    /**
+     * Topology aware components are called in the order they were added to the
+     * the array.
+     */
     protected ArrayList<ILinkDiscoveryListener> linkDiscoveryAware;
 
     protected class LinkUpdate extends LDUpdate {
@@ -252,7 +254,7 @@
     protected LinkedBlockingQueue<NodePortTuple> quarantineQueue;
     protected LinkedBlockingQueue<NodePortTuple> maintenanceQueue;
     /**
-     * Quarantine task
+     * Quarantine task.
      */
     protected SingletonTask bddpTask;
     protected static final int BDDP_TASK_INTERVAL = 100; // 100 ms.
@@ -274,7 +276,7 @@
     }
 
     /**
-     * Get the LLDP timeout value in seconds
+     * Get the LLDP timeout value in seconds.
      *
      * @return LLDP timeout value in seconds
      */
@@ -498,7 +500,7 @@
     }
 
     /**
-     * Send LLDP on known ports
+     * Send LLDP on known ports.
      */
     protected void discoverOnKnownLinkPorts() {
         // Copy the port set.
@@ -520,7 +522,7 @@
     }
 
     /**
-     * Learn remote switches when running as a distributed controller ONOS
+     * Learn remote switches when running as a distributed controller ONOS.
      */
     protected IOFSwitch addRemoteSwitch(long sw, short port) {
         IOnosRemoteSwitch remotesw = null;
@@ -697,7 +699,7 @@
     }
 
     /**
-     * Send LLDPs to all switch-ports
+     * Send LLDPs to all switch-ports.
      */
     protected void discoverOnAllPorts() {
         if (log.isTraceEnabled()) {
@@ -1409,7 +1411,7 @@
     }
 
     /**
-     * We send out LLDP messages when a switch is added to discover the topology
+     * We send out LLDP messages when a switch is added to discover the topology.
      *
      * @param sw The IOFSwitch that connected to the controller
      */
@@ -1631,7 +1633,7 @@
     }
 
     /**
-     * Register a link discovery aware component
+     * Register a link discovery aware component.
      *
      * @param linkDiscoveryAwareComponent
      */
@@ -1641,7 +1643,7 @@
     }
 
     /**
-     * Deregister a link discovery aware component
+     * Deregister a link discovery aware component.
      *
      * @param linkDiscoveryAwareComponent
      */
diff --git a/src/main/java/net/onrc/onos/core/linkdiscovery/web/LinkDiscoveryWebRoutable.java b/src/main/java/net/onrc/onos/core/linkdiscovery/web/LinkDiscoveryWebRoutable.java
index f78d43a..39ecbfa 100644
--- a/src/main/java/net/onrc/onos/core/linkdiscovery/web/LinkDiscoveryWebRoutable.java
+++ b/src/main/java/net/onrc/onos/core/linkdiscovery/web/LinkDiscoveryWebRoutable.java
@@ -18,7 +18,7 @@
     }
 
     /**
-     * Set the base path for the Topology
+     * Set the base path for the Topology.
      */
     @Override
     public String basePath() {
diff --git a/src/main/java/net/onrc/onos/core/main/IOFSwitchPortListener.java b/src/main/java/net/onrc/onos/core/main/IOFSwitchPortListener.java
index 6498844..ba21ffc 100644
--- a/src/main/java/net/onrc/onos/core/main/IOFSwitchPortListener.java
+++ b/src/main/java/net/onrc/onos/core/main/IOFSwitchPortListener.java
@@ -13,12 +13,12 @@
 public interface IOFSwitchPortListener extends IOFSwitchListener {
 
     /**
-     * Fired when ports on a switch area added
+     * Fired when ports on a switch area added.
      */
     public void switchPortAdded(Long switchId, OFPhysicalPort port);
 
     /**
-     * Fired when ports on a switch area removed
+     * Fired when ports on a switch area removed.
      */
     public void switchPortRemoved(Long switchId, OFPhysicalPort port);
 
diff --git a/src/main/java/net/onrc/onos/core/main/Main.java b/src/main/java/net/onrc/onos/core/main/Main.java
index d8e5581..7fe4995 100644
--- a/src/main/java/net/onrc/onos/core/main/Main.java
+++ b/src/main/java/net/onrc/onos/core/main/Main.java
@@ -11,14 +11,14 @@
 import org.kohsuke.args4j.CmdLineParser;
 
 /**
- * Host for the ONOS main method
+ * Host for the ONOS main method.
  *
  * @author alexreimers
  */
 public class Main {
 
     /**
-     * Main method to load configuration and modules
+     * Main method to load configuration and modules.
      *
      * @param args
      * @throws FloodlightModuleException
diff --git a/src/main/java/net/onrc/onos/core/packet/BPDU.java b/src/main/java/net/onrc/onos/core/packet/BPDU.java
index 583eeff..ce0d9a2 100644
--- a/src/main/java/net/onrc/onos/core/packet/BPDU.java
+++ b/src/main/java/net/onrc/onos/core/packet/BPDU.java
@@ -21,7 +21,7 @@
 
 /**
  * This class is a Rapid Spanning Tree Protocol
- * Bridge Protocol Data Unit
+ * Bridge Protocol Data Unit.
  *
  * @author alexreimers
  */
diff --git a/src/main/java/net/onrc/onos/core/packet/DHCP.java b/src/main/java/net/onrc/onos/core/packet/DHCP.java
index aea1ab1..e2a109e 100644
--- a/src/main/java/net/onrc/onos/core/packet/DHCP.java
+++ b/src/main/java/net/onrc/onos/core/packet/DHCP.java
@@ -51,6 +51,7 @@
      * ------------------------------------------
      * |            options (312)               |
      * ------------------------------------------
+     * Basic packet.
      */
     // Header + magic without options
     public static final int MIN_HEADER_LENGTH = 240;
@@ -279,7 +280,7 @@
     }
 
     /**
-     * Gets a specific DHCP option parameter
+     * Gets a specific DHCP option parameter.
      *
      * @param opetionCode The option code to get
      * @return The value of the option if it exists, null otherwise
diff --git a/src/main/java/net/onrc/onos/core/packet/Ethernet.java b/src/main/java/net/onrc/onos/core/packet/Ethernet.java
index 19e7c70..ef088db 100644
--- a/src/main/java/net/onrc/onos/core/packet/Ethernet.java
+++ b/src/main/java/net/onrc/onos/core/packet/Ethernet.java
@@ -57,7 +57,7 @@
     protected boolean pad = false;
 
     /**
-     * By default, set Ethernet to untagged
+     * By default, set Ethernet to untagged.
      */
     public Ethernet() {
         super();
@@ -323,7 +323,7 @@
     }
 
     /**
-     * Convert a long MAC address to a byte array
+     * Convert a long MAC address to a byte array.
      *
      * @param macAddress
      * @return the bytes of the mac address
@@ -478,7 +478,7 @@
         } else if (pkt instanceof BPDU) {
             sb.append("\nbpdu packet");
         } else {
-            sb.append("\nunknwon packet");
+            sb.append("\nunknown packet");
         }
 
         return sb.toString();
diff --git a/src/main/java/net/onrc/onos/core/packet/ICMP.java b/src/main/java/net/onrc/onos/core/packet/ICMP.java
index eb42f96..c1a0883 100644
--- a/src/main/java/net/onrc/onos/core/packet/ICMP.java
+++ b/src/main/java/net/onrc/onos/core/packet/ICMP.java
@@ -20,7 +20,7 @@
 import java.nio.ByteBuffer;
 
 /**
- * Implements ICMP packet format
+ * Implements ICMP packet format.
  *
  * @author shudong.zhou@bigswitch.com
  */
diff --git a/src/main/java/net/onrc/onos/core/packet/IPacket.java b/src/main/java/net/onrc/onos/core/packet/IPacket.java
index 8f31960..9cbba4d 100644
--- a/src/main/java/net/onrc/onos/core/packet/IPacket.java
+++ b/src/main/java/net/onrc/onos/core/packet/IPacket.java
@@ -18,7 +18,7 @@
 package net.onrc.onos.core.packet;
 
 /**
- * @author David Erickson (daviderickson@cs.stanford.edu)
+ * @author David Erickson (daviderickson@cs.stanford.edu).
  */
 public interface IPacket {
     /**
@@ -44,20 +44,20 @@
     public IPacket setParent(IPacket packet);
 
     /**
-     * Reset any checksums as needed, and call resetChecksum on all parents
+     * Reset any checksums as needed, and call resetChecksum on all parents.
      */
     public void resetChecksum();
 
     /**
      * Sets all payloads parent packet if applicable, then serializes this
-     * packet and all payloads
+     * packet and all payloads.
      *
      * @return a byte[] containing this packet and payloads
      */
     public byte[] serialize();
 
     /**
-     * Deserializes this packet layer and all possible payloads
+     * Deserializes this packet layer and all possible payloads.
      *
      * @param data
      * @param offset offset to start deserializing from
diff --git a/src/main/java/net/onrc/onos/core/packet/IPv4.java b/src/main/java/net/onrc/onos/core/packet/IPv4.java
index 8933203..72efa61 100644
--- a/src/main/java/net/onrc/onos/core/packet/IPv4.java
+++ b/src/main/java/net/onrc/onos/core/packet/IPv4.java
@@ -431,7 +431,7 @@
 
     /**
      * Accepts an IPv4 address and returns of string of the form xxx.xxx.xxx.xxx
-     * ie 192.168.0.1
+     * ie 192.168.0.1.
      *
      * @param ipAddress
      * @return
diff --git a/src/main/java/net/onrc/onos/core/topology/DeviceImpl.java b/src/main/java/net/onrc/onos/core/topology/DeviceImpl.java
index 6a4f16b..28a7796 100644
--- a/src/main/java/net/onrc/onos/core/topology/DeviceImpl.java
+++ b/src/main/java/net/onrc/onos/core/topology/DeviceImpl.java
@@ -56,7 +56,7 @@
     }
 
     /**
-     * Only {@link TopologyManager} should use this method
+     * Only {@link TopologyManager} should use this method.
      *
      * @param p
      */
@@ -66,7 +66,7 @@
     }
 
     /**
-     * Only {@link TopologyManager} should use this method
+     * Only {@link TopologyManager} should use this method.
      *
      * @param p
      */
@@ -75,7 +75,7 @@
     }
 
     /**
-     * Only {@link TopologyManager} should use this method
+     * Only {@link TopologyManager} should use this method.
      *
      * @param p
      */
@@ -84,7 +84,7 @@
     }
 
     /**
-     * Only {@link TopologyManager} should use this method
+     * Only {@link TopologyManager} should use this method.
      *
      * @param p
      */
diff --git a/src/main/java/net/onrc/onos/core/topology/LinkEvent.java b/src/main/java/net/onrc/onos/core/topology/LinkEvent.java
index 6f328f0..fbf686a 100644
--- a/src/main/java/net/onrc/onos/core/topology/LinkEvent.java
+++ b/src/main/java/net/onrc/onos/core/topology/LinkEvent.java
@@ -5,9 +5,9 @@
 import net.onrc.onos.core.topology.PortEvent.SwitchPort;
 
 /**
- * Self-contained Link event Object
+ * Self-contained Link event Object.
  * <p/>
- * TODO: We probably want common base class/interface for Self-Contained Event Object
+ * TODO: We probably want common base class/interface for Self-Contained Event Object.
  */
 public class LinkEvent {
     protected final SwitchPort src;
diff --git a/src/main/java/net/onrc/onos/core/topology/Path.java b/src/main/java/net/onrc/onos/core/topology/Path.java
index a089248..a00c425 100644
--- a/src/main/java/net/onrc/onos/core/topology/Path.java
+++ b/src/main/java/net/onrc/onos/core/topology/Path.java
@@ -4,7 +4,7 @@
 import java.util.LinkedList;
 
 /**
- * Base class for Path representation
+ * Base class for Path representation.
  *
  * @author Toshio Koide (t-koide@onlab.us)
  */
diff --git a/src/main/java/net/onrc/onos/core/topology/PortEvent.java b/src/main/java/net/onrc/onos/core/topology/PortEvent.java
index fdf8f06..1f20f22 100644
--- a/src/main/java/net/onrc/onos/core/topology/PortEvent.java
+++ b/src/main/java/net/onrc/onos/core/topology/PortEvent.java
@@ -3,9 +3,9 @@
 import java.nio.ByteBuffer;
 
 /**
- * Self-contained Port event Object
+ * Self-contained Port event Object.
  * <p/>
- * TODO: We probably want common base class/interface for Self-Contained Event Object
+ * TODO: We probably want common base class/interface for Self-Contained Event Object.
  */
 public class PortEvent {
     public static class SwitchPort {
diff --git a/src/main/java/net/onrc/onos/core/topology/SwitchEvent.java b/src/main/java/net/onrc/onos/core/topology/SwitchEvent.java
index 7ed65d8..36cf8cf 100644
--- a/src/main/java/net/onrc/onos/core/topology/SwitchEvent.java
+++ b/src/main/java/net/onrc/onos/core/topology/SwitchEvent.java
@@ -3,9 +3,9 @@
 import java.nio.ByteBuffer;
 
 /**
- * Self-contained Switch Object
+ * Self-contained Switch Object.
  * <p/>
- * TODO: We probably want common base class/interface for Self-Contained Event Object
+ * TODO: We probably want common base class/interface for Self-Contained Event Object.
  */
 public class SwitchEvent {
     protected final Long dpid;
diff --git a/src/main/java/net/onrc/onos/core/util/CallerId.java b/src/main/java/net/onrc/onos/core/util/CallerId.java
index 6986f13..93e968e 100644
--- a/src/main/java/net/onrc/onos/core/util/CallerId.java
+++ b/src/main/java/net/onrc/onos/core/util/CallerId.java
@@ -17,7 +17,7 @@
     }
 
     /**
-     * Copy constructor
+     * Copy constructor.
      *
      * @param otherCallerId
      */
diff --git a/src/main/java/net/onrc/onos/core/util/FlowEntryAction.java b/src/main/java/net/onrc/onos/core/util/FlowEntryAction.java
index cefc316..0290924 100644
--- a/src/main/java/net/onrc/onos/core/util/FlowEntryAction.java
+++ b/src/main/java/net/onrc/onos/core/util/FlowEntryAction.java
@@ -208,7 +208,7 @@
     }
 
     /**
-     * Action structure for ACTION_SET_VLAN_VID: Set the 802.1q VLAN id
+     * Action structure for ACTION_SET_VLAN_VID: Set the 802.1q VLAN id.
      */
     public static class ActionSetVlanId {
         private short vlanId;        // The VLAN ID to set
@@ -307,7 +307,7 @@
     }
 
     /**
-     * Action structure for ACTION_SET_VLAN_PCP: Set the 802.1q priority
+     * Action structure for ACTION_SET_VLAN_PCP: Set the 802.1q priority.
      */
     public static class ActionSetVlanPriority {
         private byte vlanPriority;    // The VLAN priority to set
@@ -406,7 +406,7 @@
     }
 
     /**
-     * Action structure for ACTION_STRIP_VLAN: Strip the 802.1q header
+     * Action structure for ACTION_STRIP_VLAN: Strip the 802.1q header.
      */
     public static class ActionStripVlan {
         private boolean stripVlan;    // If true, strip the VLAN header
diff --git a/src/main/java/net/onrc/onos/core/util/FlowEntryId.java b/src/main/java/net/onrc/onos/core/util/FlowEntryId.java
index a46549f..542a19d 100644
--- a/src/main/java/net/onrc/onos/core/util/FlowEntryId.java
+++ b/src/main/java/net/onrc/onos/core/util/FlowEntryId.java
@@ -91,7 +91,7 @@
     }
 
     /**
-     * Return the hash code of the Flow Entry ID
+     * Return the hash code of the Flow Entry ID.
      */
     @Override
     public int hashCode() {
diff --git a/src/main/java/net/onrc/onos/core/util/FlowEntryMatch.java b/src/main/java/net/onrc/onos/core/util/FlowEntryMatch.java
index f0b1152..3b603e9 100644
--- a/src/main/java/net/onrc/onos/core/util/FlowEntryMatch.java
+++ b/src/main/java/net/onrc/onos/core/util/FlowEntryMatch.java
@@ -526,7 +526,7 @@
     }
 
     /**
-     * Get the matching IP ToS (DSCP field, 6 bits)
+     * Get the matching IP ToS (DSCP field, 6 bits).
      *
      * @return the matching IP ToS.
      */
diff --git a/src/main/java/net/onrc/onos/core/util/PerformanceMonitor.java b/src/main/java/net/onrc/onos/core/util/PerformanceMonitor.java
index 0fb064e..389453f 100644
--- a/src/main/java/net/onrc/onos/core/util/PerformanceMonitor.java
+++ b/src/main/java/net/onrc/onos/core/util/PerformanceMonitor.java
@@ -9,7 +9,7 @@
 import org.slf4j.LoggerFactory;
 
 /**
- * Class for collecting performance measurements
+ * Class for collecting performance measurements.
  */
 public class PerformanceMonitor {
     private static final Logger log = LoggerFactory.getLogger(PerformanceMonitor.class);
@@ -36,7 +36,7 @@
     private static final double NORMALIZATION = Math.pow(10, 6);
 
     /**
-     * Start a performance measurement, identified by a tag
+     * Start a performance measurement, identified by a tag.
      * <p/>
      * Note: Only a single measurement can use the same tag at a time.
      * ..... not true anymore.
@@ -96,7 +96,7 @@
     }
 
     /**
-     * Write all performance measurements to the log
+     * Write all performance measurements to the log.
      */
     public void reportAll() {
         StringBuilder result = new StringBuilder();
@@ -149,7 +149,7 @@
     }
 
     /**
-     * Write the performance measurement for a tag to the log
+     * Write the performance measurement for a tag to the log.
      *
      * @param tag the tag name.
      */
@@ -169,14 +169,14 @@
     }
 
     /**
-     * A single performance measurement
+     * A single performance measurement.
      */
     public static class Measurement {
         long start;
         long stop = -1;
 
         /**
-         * Start the measurement
+         * Start the measurement.
          */
         public void start() {
             if (start <= 0) {
@@ -185,7 +185,7 @@
         }
 
         /**
-         * Stop the measurement
+         * Stop the measurement.
          */
         public void stop() {
             long now = System.nanoTime();
@@ -193,7 +193,7 @@
         }
 
         /**
-         * Stop the measurement at a specific time
+         * Stop the measurement at a specific time.
          *
          * @param time to stop
          */
@@ -204,7 +204,7 @@
         }
 
         /**
-         * Compute the elapsed time of the measurement in nanoseconds
+         * Compute the elapsed time of the measurement in nanoseconds.
          *
          * @return the measurement time in nanoseconds, or -1 if the measurement is stil running.
          */
diff --git a/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java b/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java
index ca631e1..8c77fc8 100644
--- a/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java
+++ b/src/main/java/net/onrc/onos/core/util/serializers/KryoFactory.java
@@ -70,7 +70,7 @@
     }
 
     /**
-     * Constructor to explicitly specify number of Kryo instances to pool
+     * Constructor to explicitly specify number of Kryo instances to pool.
      *
      * @param initialCapacity number of Kryo instance to preallocate
      */
