diff --git a/conf/checkstyle/sun_checks.xml b/conf/checkstyle/sun_checks.xml
index baf8019..2e85f0e 100644
--- a/conf/checkstyle/sun_checks.xml
+++ b/conf/checkstyle/sun_checks.xml
@@ -106,9 +106,7 @@
             <property name="scope" value="public"/>
             <property name="severity" value="warning"/>
         </module>
-        <module name="JavadocStyle">
-          <property name="severity" value="warning"/>
-        </module>
+        <module name="JavadocStyle"/>
 
 
         <!-- Checks for Naming Conventions.                  -->
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
      */
