diff --git a/apps/foo/src/main/java/org/onlab/onos/foo/IOLoopTestClient.java b/apps/foo/src/main/java/org/onlab/onos/foo/IOLoopTestClient.java
index dd72128..7ea0d26 100644
--- a/apps/foo/src/main/java/org/onlab/onos/foo/IOLoopTestClient.java
+++ b/apps/foo/src/main/java/org/onlab/onos/foo/IOLoopTestClient.java
@@ -85,7 +85,7 @@
         System.exit(0);
     }
 
-    /**
+    /*
      * Starts a standalone IO loop test client.
      *
      * @param args command-line arguments
diff --git a/apps/foo/src/main/java/org/onlab/onos/foo/IOLoopTestServer.java b/apps/foo/src/main/java/org/onlab/onos/foo/IOLoopTestServer.java
index a4aed30..7fe743c 100644
--- a/apps/foo/src/main/java/org/onlab/onos/foo/IOLoopTestServer.java
+++ b/apps/foo/src/main/java/org/onlab/onos/foo/IOLoopTestServer.java
@@ -85,7 +85,7 @@
         System.exit(0);
     }
 
-    /**
+    /*
      * Starts a standalone IO loop test server.
      *
      * @param args command-line arguments
diff --git a/cli/src/main/java/org/onlab/onos/cli/AbstractShellCommand.java b/cli/src/main/java/org/onlab/onos/cli/AbstractShellCommand.java
index 35dc2a2..122245a 100644
--- a/cli/src/main/java/org/onlab/onos/cli/AbstractShellCommand.java
+++ b/cli/src/main/java/org/onlab/onos/cli/AbstractShellCommand.java
@@ -92,6 +92,7 @@
     /**
      * Produces a JSON object from the specified key/value annotations.
      *
+     * @param mapper ObjectMapper to use while converting to JSON
      * @param annotations key/value annotations
      * @return JSON object
      */
diff --git a/cli/src/main/java/org/onlab/onos/cli/net/ConnectivityIntentCommand.java b/cli/src/main/java/org/onlab/onos/cli/net/ConnectivityIntentCommand.java
index b61a646..d8ec3c7 100644
--- a/cli/src/main/java/org/onlab/onos/cli/net/ConnectivityIntentCommand.java
+++ b/cli/src/main/java/org/onlab/onos/cli/net/ConnectivityIntentCommand.java
@@ -44,6 +44,7 @@
     /**
      * Constructs a traffic selector based on the command line arguments
      * presented to the command.
+     * @return traffic selector
      */
     protected TrafficSelector buildTrafficSelector() {
         TrafficSelector.Builder selectorBuilder = DefaultTrafficSelector.builder();
diff --git a/cli/src/main/java/org/onlab/onos/cli/net/FlowsListCommand.java b/cli/src/main/java/org/onlab/onos/cli/net/FlowsListCommand.java
index ab79d03..0bc7c61 100644
--- a/cli/src/main/java/org/onlab/onos/cli/net/FlowsListCommand.java
+++ b/cli/src/main/java/org/onlab/onos/cli/net/FlowsListCommand.java
@@ -141,7 +141,8 @@
     /**
      * Returns the list of devices sorted using the device ID URIs.
      *
-     * @param service device service
+     * @param deviceService device service
+     * @param service flow rule service
      * @return sorted device list
      */
     protected Map<Device, List<FlowEntry>> getSortedFlows(DeviceService deviceService,
@@ -175,7 +176,8 @@
      * Prints flows.
      *
      * @param d     the device
-     * @param flows the set of flows for that device.
+     * @param flows the set of flows for that device
+     * @param coreService core system service
      */
     protected void printFlows(Device d, List<FlowEntry> flows,
                               CoreService coreService) {
diff --git a/core/api/src/main/java/org/onlab/onos/cluster/DefaultControllerNode.java b/core/api/src/main/java/org/onlab/onos/cluster/DefaultControllerNode.java
index 3aee1a6..4ed972f 100644
--- a/core/api/src/main/java/org/onlab/onos/cluster/DefaultControllerNode.java
+++ b/core/api/src/main/java/org/onlab/onos/cluster/DefaultControllerNode.java
@@ -54,6 +54,7 @@
      *
      * @param id instance identifier
      * @param ip instance IP address
+     * @param tcpPort TCP port
      */
     public DefaultControllerNode(NodeId id, IpAddress ip, int tcpPort) {
         this.id = id;
diff --git a/core/api/src/main/java/org/onlab/onos/net/DefaultDevice.java b/core/api/src/main/java/org/onlab/onos/net/DefaultDevice.java
index f6ba352..1207427 100644
--- a/core/api/src/main/java/org/onlab/onos/net/DefaultDevice.java
+++ b/core/api/src/main/java/org/onlab/onos/net/DefaultDevice.java
@@ -54,6 +54,7 @@
      * @param hwVersion    device HW version
      * @param swVersion    device SW version
      * @param serialNumber device serial number
+     * @param chassisId    chasis id
      * @param annotations optional key/value annotations
      */
     public DefaultDevice(ProviderId providerId, DeviceId id, Type type,
diff --git a/core/api/src/main/java/org/onlab/onos/net/DeviceId.java b/core/api/src/main/java/org/onlab/onos/net/DeviceId.java
index 5dcc076..e1080f2 100644
--- a/core/api/src/main/java/org/onlab/onos/net/DeviceId.java
+++ b/core/api/src/main/java/org/onlab/onos/net/DeviceId.java
@@ -48,6 +48,7 @@
      * Creates a device id using the supplied URI.
      *
      * @param uri device URI
+     * @return DeviceId
      */
     public static DeviceId deviceId(URI uri) {
         return new DeviceId(uri);
@@ -57,6 +58,7 @@
      * Creates a device id using the supplied URI string.
      *
      * @param string device URI string
+     * @return DeviceId
      */
     public static DeviceId deviceId(String string) {
         return deviceId(URI.create(string));
diff --git a/core/api/src/main/java/org/onlab/onos/net/device/DefaultDeviceDescription.java b/core/api/src/main/java/org/onlab/onos/net/device/DefaultDeviceDescription.java
index 1bbdaf7..e3aa2ed 100644
--- a/core/api/src/main/java/org/onlab/onos/net/device/DefaultDeviceDescription.java
+++ b/core/api/src/main/java/org/onlab/onos/net/device/DefaultDeviceDescription.java
@@ -47,6 +47,7 @@
      * @param hwVersion    device HW version
      * @param swVersion    device SW version
      * @param serialNumber device serial number
+     * @param chassis      chasis id
      * @param annotations  optional key/value annotations map
      */
     public DefaultDeviceDescription(URI uri, Type type, String manufacturer,
diff --git a/core/api/src/main/java/org/onlab/onos/net/device/DeviceProviderService.java b/core/api/src/main/java/org/onlab/onos/net/device/DeviceProviderService.java
index 6f71495..d156b28 100644
--- a/core/api/src/main/java/org/onlab/onos/net/device/DeviceProviderService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/device/DeviceProviderService.java
@@ -32,6 +32,7 @@
     /**
      * Signals the core that a device has connected or has been detected somehow.
      *
+     * @param deviceId device identifier
      * @param deviceDescription information about network device
      */
     void deviceConnected(DeviceId deviceId, DeviceDescription deviceDescription);
@@ -65,7 +66,7 @@
      *
      * @param deviceId identity of the device
      * @param requested mastership role that was requested by the node
-     * @param replied mastership role the switch accepted
+     * @param response mastership role the switch accepted
      */
     void receivedRoleReply(DeviceId deviceId, MastershipRole requested, MastershipRole response);
 
diff --git a/core/api/src/main/java/org/onlab/onos/net/device/DeviceStore.java b/core/api/src/main/java/org/onlab/onos/net/device/DeviceStore.java
index f3f124a..bc0b5c1 100644
--- a/core/api/src/main/java/org/onlab/onos/net/device/DeviceStore.java
+++ b/core/api/src/main/java/org/onlab/onos/net/device/DeviceStore.java
@@ -125,6 +125,7 @@
      * Administratively removes the specified device from the store.
      *
      * @param deviceId device to be removed
+     * @return null if no such device, or was forwarded to remove master
      */
     DeviceEvent removeDevice(DeviceId deviceId);
 }
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficSelector.java b/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficSelector.java
index 352f604..413473f 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficSelector.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficSelector.java
@@ -99,6 +99,7 @@
      * Returns a new traffic selector builder primed to produce entities
      * patterned after the supplied selector.
      *
+     * @param selector base selector
      * @return traffic selector builder
      */
     public static TrafficSelector.Builder builder(TrafficSelector selector) {
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficTreatment.java b/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficTreatment.java
index c0b3986..a63ae13 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficTreatment.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/DefaultTrafficTreatment.java
@@ -63,6 +63,7 @@
      * Returns a new traffic treatment builder primed to produce entities
      * patterned after the supplied treatment.
      *
+     * @param treatment base treatment
      * @return traffic treatment builder
      */
     public static TrafficTreatment.Builder builder(TrafficTreatment treatment) {
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProvider.java b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProvider.java
index 05ecd66..de2c7fd 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProvider.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProvider.java
@@ -48,6 +48,7 @@
     /**
      * Removes rules by their id.
      * @param id the id to remove
+     * @param flowRules one or more flow rules
      */
     void removeRulesById(ApplicationId id, FlowRule... flowRules);
 
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderService.java b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderService.java
index 2f2dd5e..4c0d98d 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleProviderService.java
@@ -35,6 +35,7 @@
      * Pushes the collection of flow entries currently applied on the given
      * device.
      *
+     * @param deviceId device identifier
      * @param flowEntries collection of flow rules
      */
     void pushFlowMetrics(DeviceId deviceId, Iterable<FlowEntry> flowEntries);
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleService.java b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleService.java
index 789b6bf..f40a0f1 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/FlowRuleService.java
@@ -86,6 +86,7 @@
     /**
      * Applies a batch operation of FlowRules.
      *
+     * @param batch batch operation to apply
      * @return future indicating the state of the batch operation
      */
     Future<CompletedBatchOperation> applyBatch(FlowRuleBatchOperation batch);
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/TrafficSelector.java b/core/api/src/main/java/org/onlab/onos/net/flow/TrafficSelector.java
index dd8e2ae..e0c8c78 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/TrafficSelector.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/TrafficSelector.java
@@ -137,14 +137,14 @@
 
         /**
          * Matches an optical signal ID or lambda.
-         * @param lambda
+         * @param lambda lamda
          * @return a selection builder
          */
         public Builder matchLambda(Short lambda);
 
         /**
          * Matches an optical Signal Type.
-         * @param signalType
+         * @param signalType signalType
          * @return a selection builder
          */
         public Builder matchOpticalSignalType(Short signalType);
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criteria.java b/core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criteria.java
index a1ac5f8..bac1bab 100644
--- a/core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criteria.java
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criteria.java
@@ -131,7 +131,7 @@
     /**
      * Creates a match on TCP source port field using the specified value.
      *
-     * @param tcpPort
+     * @param tcpPort TCP source port
      * @return match criterion
      */
     public static Criterion matchTcpSrc(Short tcpPort) {
@@ -141,7 +141,7 @@
     /**
      * Creates a match on TCP destination port field using the specified value.
      *
-     * @param tcpPort
+     * @param tcpPort TCP destination port
      * @return match criterion
      */
     public static Criterion matchTcpDst(Short tcpPort) {
@@ -151,7 +151,7 @@
     /**
      * Creates a match on lambda field using the specified value.
      *
-     * @param lambda
+     * @param lambda lamda to match on
      * @return match criterion
      */
     public static Criterion matchLambda(Short lambda) {
@@ -161,7 +161,7 @@
     /**
      * Creates a match on lambda field using the specified value.
      *
-     * @param sigType
+     * @param sigType signame type
      * @return match criterion
      */
     public static Criterion matchOpticalSignalType(Short sigType) {
diff --git a/core/api/src/main/java/org/onlab/onos/net/intent/Intent.java b/core/api/src/main/java/org/onlab/onos/net/intent/Intent.java
index 885b851..657a3e4 100644
--- a/core/api/src/main/java/org/onlab/onos/net/intent/Intent.java
+++ b/core/api/src/main/java/org/onlab/onos/net/intent/Intent.java
@@ -91,6 +91,7 @@
      * Produces an intent identifier backed by hash-like fingerprint for the
      * specified class of intent and its constituent fields.
      *
+     * @param intentClass Class of the intent
      * @param fields intent fields
      * @return intent identifier
      */
diff --git a/core/api/src/main/java/org/onlab/onos/net/intent/IntentInstaller.java b/core/api/src/main/java/org/onlab/onos/net/intent/IntentInstaller.java
index 7566210..93d8a40 100644
--- a/core/api/src/main/java/org/onlab/onos/net/intent/IntentInstaller.java
+++ b/core/api/src/main/java/org/onlab/onos/net/intent/IntentInstaller.java
@@ -27,6 +27,7 @@
      * Installs the specified intent to the environment.
      *
      * @param intent intent to be installed
+     * @return FlowRule operations to install
      * @throws IntentException if issues are encountered while installing the intent
      */
     List<FlowRuleBatchOperation> install(T intent);
@@ -35,6 +36,7 @@
      * Uninstalls the specified intent from the environment.
      *
      * @param intent intent to be uninstalled
+     * @return FlowRule operations to uninstall
      * @throws IntentException if issues are encountered while uninstalling the intent
      */
     List<FlowRuleBatchOperation> uninstall(T intent);
diff --git a/core/api/src/main/java/org/onlab/onos/net/intent/IntentService.java b/core/api/src/main/java/org/onlab/onos/net/intent/IntentService.java
index 9cffb11..090af63 100644
--- a/core/api/src/main/java/org/onlab/onos/net/intent/IntentService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/intent/IntentService.java
@@ -59,6 +59,7 @@
      * affected at later time.
      * </p>
      * @param operations batch of intent operations
+     * @return Future to get execution result
      */
     Future<IntentOperations> execute(IntentOperations operations);
 
diff --git a/core/api/src/main/java/org/onlab/onos/net/intent/PathIntent.java b/core/api/src/main/java/org/onlab/onos/net/intent/PathIntent.java
index 60ba70c..0e9fa6d 100644
--- a/core/api/src/main/java/org/onlab/onos/net/intent/PathIntent.java
+++ b/core/api/src/main/java/org/onlab/onos/net/intent/PathIntent.java
@@ -42,6 +42,7 @@
      * @param selector  traffic selector
      * @param treatment treatment
      * @param path      traversed links
+     * @param resourceRequests link resource request
      * @throws NullPointerException {@code path} is null
      */
     public PathIntent(ApplicationId appId, TrafficSelector selector,
diff --git a/core/api/src/main/java/org/onlab/onos/net/intent/PointToPointIntentWithBandwidthConstraint.java b/core/api/src/main/java/org/onlab/onos/net/intent/PointToPointIntentWithBandwidthConstraint.java
index d5c4d57..a9b614c 100644
--- a/core/api/src/main/java/org/onlab/onos/net/intent/PointToPointIntentWithBandwidthConstraint.java
+++ b/core/api/src/main/java/org/onlab/onos/net/intent/PointToPointIntentWithBandwidthConstraint.java
@@ -46,6 +46,7 @@
      * @param treatment    treatment
      * @param ingressPoint ingress port
      * @param egressPoint  egress port
+     * @param bandwidthResourceRequest bandwidth resource request
      * @throws NullPointerException if {@code ingressPoint} or {@code egressPoints} is null.
      */
     public PointToPointIntentWithBandwidthConstraint(ApplicationId appId, TrafficSelector selector,
diff --git a/core/api/src/main/java/org/onlab/onos/net/statistic/StatisticStore.java b/core/api/src/main/java/org/onlab/onos/net/statistic/StatisticStore.java
index 29eced7..96fcc11 100644
--- a/core/api/src/main/java/org/onlab/onos/net/statistic/StatisticStore.java
+++ b/core/api/src/main/java/org/onlab/onos/net/statistic/StatisticStore.java
@@ -34,7 +34,7 @@
 
     /**
      * Remove entries associated with this rule.
-     a @param rule {@link org.onlab.onos.net.flow.FlowRule}
+     * @param rule {@link org.onlab.onos.net.flow.FlowRule}
      */
     void removeFromStatistics(FlowRule rule);
 
diff --git a/core/api/src/main/java/org/onlab/onos/net/topology/PathService.java b/core/api/src/main/java/org/onlab/onos/net/topology/PathService.java
index c4623b6..1719285 100644
--- a/core/api/src/main/java/org/onlab/onos/net/topology/PathService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/topology/PathService.java
@@ -43,6 +43,7 @@
      *
      * @param src source element
      * @param dst destination element
+     * @param weight edge-weight entity
      * @return set of all shortest paths between the two element
      */
     Set<Path> getPaths(ElementId src, ElementId dst, LinkWeight weight);
diff --git a/core/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java
index 31a718b..5d8bbdf 100644
--- a/core/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java
+++ b/core/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java
@@ -103,6 +103,7 @@
      * @param topology topology descriptor
      * @param src      source device
      * @param dst      destination device
+     * @param weight   edge-weight entity
      * @return set of all shortest paths between the two devices
      */
     Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst,
diff --git a/core/api/src/main/java/org/onlab/onos/store/cluster/messaging/ClusterCommunicationService.java b/core/api/src/main/java/org/onlab/onos/store/cluster/messaging/ClusterCommunicationService.java
index cd2daff..283f92d 100644
--- a/core/api/src/main/java/org/onlab/onos/store/cluster/messaging/ClusterCommunicationService.java
+++ b/core/api/src/main/java/org/onlab/onos/store/cluster/messaging/ClusterCommunicationService.java
@@ -33,6 +33,7 @@
      *
      * @param message  message to send
      * @return true if the message was sent successfully to all nodes; false otherwise.
+     * @throws IOException when I/O exception of some sort has occurred
      */
     boolean broadcast(ClusterMessage message) throws IOException;
 
@@ -42,6 +43,7 @@
      * @param message  message to send
      * @param toNodeId node identifier
      * @return true if the message was sent successfully; false otherwise.
+     * @throws IOException when I/O exception of some sort has occurred
      */
     boolean unicast(ClusterMessage message, NodeId toNodeId) throws IOException;
 
@@ -49,7 +51,9 @@
      * Multicast a message to a set of controller nodes.
      *
      * @param message  message to send
+     * @param nodeIds  recipient node identifiers
      * @return true if the message was sent successfully to all nodes in the group; false otherwise.
+     * @throws IOException when I/O exception of some sort has occurred
      */
     boolean multicast(ClusterMessage message, Set<NodeId> nodeIds) throws IOException;
 
@@ -58,7 +62,7 @@
      * @param message message to send
      * @param toNodeId recipient node identifier
      * @return reply future.
-     * @throws IOException
+     * @throws IOException when I/O exception of some sort has occurred
      */
     ListenableFuture<byte[]> sendAndReceive(ClusterMessage message, NodeId toNodeId) throws IOException;
 
diff --git a/core/api/src/main/java/org/onlab/onos/store/cluster/messaging/ClusterMessage.java b/core/api/src/main/java/org/onlab/onos/store/cluster/messaging/ClusterMessage.java
index 5c8550f..c820704 100644
--- a/core/api/src/main/java/org/onlab/onos/store/cluster/messaging/ClusterMessage.java
+++ b/core/api/src/main/java/org/onlab/onos/store/cluster/messaging/ClusterMessage.java
@@ -32,7 +32,9 @@
     /**
      * Creates a cluster message.
      *
+     * @param sender  message sender
      * @param subject message subject
+     * @param payload message payload
      */
     public ClusterMessage(NodeId sender, MessageSubject subject, byte[] payload) {
         this.sender = sender;
@@ -71,7 +73,7 @@
      * Sends a response to the sender.
      *
      * @param data payload response.
-     * @throws IOException
+     * @throws IOException when I/O exception of some sort has occurred
      */
     public void respond(byte[] data) throws IOException {
         throw new IllegalStateException("One can only repond to message recived from others.");
diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/cluster/impl/ClusterDefinitionStore.java b/core/store/dist/src/main/java/org/onlab/onos/store/cluster/impl/ClusterDefinitionStore.java
index 97ec769..19b6485 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/cluster/impl/ClusterDefinitionStore.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/cluster/impl/ClusterDefinitionStore.java
@@ -48,7 +48,7 @@
         file = new File(filePath);
     }
 
-    /**
+    /*
      * Returns set of the controller nodes, including self.
      *
      * @return set of controller nodes
@@ -67,7 +67,7 @@
         return nodes;
     }
 
-    /**
+    /*
      * Writes the given set of the controller nodes.
      *
      * @param nodes set of controller nodes
diff --git a/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/StoreSerializer.java b/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/StoreSerializer.java
index 48fff65..8ebb0e6 100644
--- a/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/StoreSerializer.java
+++ b/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/StoreSerializer.java
@@ -44,6 +44,7 @@
      *
      * @param bytes bytes to be deserialized
      * @return deserialized object
+     * @param <T> decoded type
      */
     public <T> T decode(final byte[] bytes);
 
@@ -52,6 +53,7 @@
      *
      * @param buffer bytes to be deserialized
      * @return deserialized object
+     * @param <T> decoded type
      */
     public <T> T decode(final ByteBuffer buffer);
 }
diff --git a/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowEventListener.java b/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowEventListener.java
index bc842a0..fc9a872 100644
--- a/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowEventListener.java
+++ b/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowEventListener.java
@@ -26,6 +26,7 @@
     /**
      * Handles the message event.
      *
+     * @param dpid switch data path identifier
      * @param msg the message
      */
     public void handleMessage(Dpid dpid, OFMessage msg);
diff --git a/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowPacketContext.java b/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowPacketContext.java
index 13092b2..0d085dd 100644
--- a/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowPacketContext.java
+++ b/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowPacketContext.java
@@ -31,6 +31,7 @@
     /**
      * Blocks further responses (ie. send() calls) on this
      * packet in event.
+     * @return true if blocks
      */
     public boolean block();
 
diff --git a/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowSwitch.java b/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowSwitch.java
index 2d3f890..bd90241 100644
--- a/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowSwitch.java
+++ b/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowSwitch.java
@@ -133,7 +133,7 @@
      * @param requested the role requested by the controller
      * @param response the role set at the device
      */
-    public void returnRoleReply(RoleState requested, RoleState reponse);
+    public void returnRoleReply(RoleState requested, RoleState response);
 
     /**
      * Indicates if this switch is optical.
diff --git a/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowSwitchListener.java b/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowSwitchListener.java
index 192f045..3b6450b 100644
--- a/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowSwitchListener.java
+++ b/openflow/api/src/main/java/org/onlab/onos/openflow/controller/OpenFlowSwitchListener.java
@@ -51,7 +51,8 @@
      * Notify that a role imposed on a switch failed to take hold.
      *
      * @param dpid the switch that failed role assertion
-     * @param role the role imposed by the controller
+     * @param requested the role controller requested
+     * @param response role reply from the switch
      */
     public void receivedRoleReply(Dpid dpid, RoleState requested, RoleState response);
 }
diff --git a/openflow/api/src/main/java/org/onlab/onos/openflow/controller/driver/OpenFlowAgent.java b/openflow/api/src/main/java/org/onlab/onos/openflow/controller/driver/OpenFlowAgent.java
index 6b73efc..468d3ae 100644
--- a/openflow/api/src/main/java/org/onlab/onos/openflow/controller/driver/OpenFlowAgent.java
+++ b/openflow/api/src/main/java/org/onlab/onos/openflow/controller/driver/OpenFlowAgent.java
@@ -95,7 +95,8 @@
      * Notifies the controller that role assertion has failed.
      *
      * @param dpid the switch that failed role assertion
-     * @param role the failed role
+     * @param requested the role controller requested
+     * @param response role reply from the switch
      */
     public void returnRoleReply(Dpid dpid, RoleState requested, RoleState response);
 }
diff --git a/openflow/api/src/main/java/org/onlab/onos/openflow/controller/driver/RoleHandler.java b/openflow/api/src/main/java/org/onlab/onos/openflow/controller/driver/RoleHandler.java
index 8611664..c32d298 100644
--- a/openflow/api/src/main/java/org/onlab/onos/openflow/controller/driver/RoleHandler.java
+++ b/openflow/api/src/main/java/org/onlab/onos/openflow/controller/driver/RoleHandler.java
@@ -58,8 +58,9 @@
      * OF1.3 switches, because Role.EQUAL is well defined and we can simulate
      * SLAVE behavior by using ASYNC messages.
      *
-     * @param role
-     * @throws IOException
+     * @param role role to request
+     * @param exp expectation
+     * @throws IOException when I/O exception of some sort has occurred
      * @return false if and only if the switch does not support role-request
      * messages, according to the switch driver; true otherwise.
      */
@@ -70,7 +71,7 @@
      * Extract the role information from an OF1.3 Role Reply Message.
      * @param rrmsg role reply message
      * @return RoleReplyInfo object
-     * @throws SwitchStateException
+     * @throws SwitchStateException If unknown role encountered
      */
     public RoleReplyInfo extractOFRoleReply(OFRoleReply rrmsg)
             throws SwitchStateException;
@@ -89,6 +90,7 @@
      *
      * @param rri information about role-reply in format that
      *                      controller can understand.
+     * @return result comparing expected and received reply
      * @throws SwitchStateException if no request is pending
      */
     public RoleRecvStatus deliverRoleReply(RoleReplyInfo rri)
@@ -102,6 +104,9 @@
      * Note: since we only keep the last pending request we might get
      * error messages for earlier role requests that we won't be able
      * to handle
+     * @param error error message
+     * @return result comparing expected and received reply
+     * @throws SwitchStateException if switch did not support requested role
      */
     public RoleRecvStatus deliverError(OFErrorMsg error)
             throws SwitchStateException;
diff --git a/openflow/ctl/src/main/java/org/onlab/onos/openflow/controller/impl/Controller.java b/openflow/ctl/src/main/java/org/onlab/onos/openflow/controller/impl/Controller.java
index d79227a..1d0e4cb 100644
--- a/openflow/ctl/src/main/java/org/onlab/onos/openflow/controller/impl/Controller.java
+++ b/openflow/ctl/src/main/java/org/onlab/onos/openflow/controller/impl/Controller.java
@@ -160,6 +160,7 @@
 
     /**
      * Initialize internal data structures.
+     * @param configParams configuration parameters
      */
     public void init(Map<String, String> configParams) {
         // These data structures are initialized here because other
@@ -192,7 +193,9 @@
 
     /**
      * Forward to the driver-manager to get an IOFSwitch instance.
-     * @param desc
+     * @param dpid data path id
+     * @param desc switch description
+     * @param ofv OpenFlow version
      * @return switch instance
      */
     protected OpenFlowSwitchDriver getOFSwitchInstance(long dpid,
diff --git a/providers/lldp/src/main/java/org/onlab/onos/provider/lldp/impl/LinkDiscovery.java b/providers/lldp/src/main/java/org/onlab/onos/provider/lldp/impl/LinkDiscovery.java
index a20ab90..e0eea96 100644
--- a/providers/lldp/src/main/java/org/onlab/onos/provider/lldp/impl/LinkDiscovery.java
+++ b/providers/lldp/src/main/java/org/onlab/onos/provider/lldp/impl/LinkDiscovery.java
@@ -90,7 +90,9 @@
      * Starts the the timer for the discovery process.
      *
      * @param device        the physical switch
+     * @param pktService    packet service
      * @param masterService mastership service
+     * @param providerService link provider service
      * @param useBDDP       flag to also use BDDP for discovery
      */
     public LinkDiscovery(Device device, PacketService pktService,
@@ -201,6 +203,8 @@
     /**
      * Handles an incoming LLDP packet. Creates link in topology and sends ACK
      * to port where LLDP originated.
+     * @param context packet context
+     * @return true if handled
      */
     public boolean handleLLDP(PacketContext context) {
         Ethernet eth = context.inPacket().parsed();
diff --git a/providers/openflow/link/src/main/java/org/onlab/onos/provider/of/link/impl/LinkDiscovery.java b/providers/openflow/link/src/main/java/org/onlab/onos/provider/of/link/impl/LinkDiscovery.java
index 02176cc..00c7305 100644
--- a/providers/openflow/link/src/main/java/org/onlab/onos/provider/of/link/impl/LinkDiscovery.java
+++ b/providers/openflow/link/src/main/java/org/onlab/onos/provider/of/link/impl/LinkDiscovery.java
@@ -87,7 +87,7 @@
     protected final Map<Integer, OFPortDesc> ports;
     private Timeout timeout;
 
-    /**
+    /*
      * Instantiates discovery manager for the given physical switch. Creates a
      * generic LLDP packet that will be customized for the port it is sent out on.
      * Starts the the timer for the discovery process.
@@ -281,7 +281,7 @@
         return "LinkDiscovery " + this.sw.getStringId();
     }
 
-    /**
+    /*
      * Handles an incoming LLDP packet. Creates link in topology and sends ACK
      * to port where LLDP originated.
      */
diff --git a/utils/misc/src/main/java/org/onlab/graph/MutableAdjacencyListsGraph.java b/utils/misc/src/main/java/org/onlab/graph/MutableAdjacencyListsGraph.java
index 299ec46..044a60d 100644
--- a/utils/misc/src/main/java/org/onlab/graph/MutableAdjacencyListsGraph.java
+++ b/utils/misc/src/main/java/org/onlab/graph/MutableAdjacencyListsGraph.java
@@ -38,8 +38,8 @@
     /**
      * Creates a graph comprising of the specified vertexes and edges.
      *
-     * @param vertexes set of graph vertexes
-     * @param edges    set of graph edges
+     * @param vertex   set of graph vertexes
+     * @param edge     set of graph edges
      */
     public MutableAdjacencyListsGraph(Set<V> vertex, Set<E> edge) {
         vertexes.addAll(vertex);
diff --git a/utils/misc/src/main/java/org/onlab/packet/ARP.java b/utils/misc/src/main/java/org/onlab/packet/ARP.java
index 91713c1..86fb289 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ARP.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ARP.java
@@ -55,6 +55,7 @@
     /**
      * @param hwType
      *            the hardwareType to set
+     * @return this
      */
     public ARP setHardwareType(final short hwType) {
         this.hardwareType = hwType;
@@ -71,6 +72,7 @@
     /**
      * @param protoType
      *            the protocolType to set
+     * @return this
      */
     public ARP setProtocolType(final short protoType) {
         this.protocolType = protoType;
@@ -87,6 +89,7 @@
     /**
      * @param hwAddressLength
      *            the hardwareAddressLength to set
+     * @return this
      */
     public ARP setHardwareAddressLength(final byte hwAddressLength) {
         this.hardwareAddressLength = hwAddressLength;
@@ -103,6 +106,7 @@
     /**
      * @param protoAddressLength
      *            the protocolAddressLength to set
+     * @return this
      */
     public ARP setProtocolAddressLength(final byte protoAddressLength) {
         this.protocolAddressLength = protoAddressLength;
@@ -119,6 +123,7 @@
     /**
      * @param op
      *            the opCode to set
+     * @return this
      */
     public ARP setOpCode(final short op) {
         this.opCode = op;
@@ -135,6 +140,7 @@
     /**
      * @param senderHWAddress
      *            the senderHardwareAddress to set
+     * @return this
      */
     public ARP setSenderHardwareAddress(final byte[] senderHWAddress) {
         this.senderHardwareAddress = senderHWAddress;
@@ -151,6 +157,7 @@
     /**
      * @param senderProtoAddress
      *            the senderProtocolAddress to set
+     * @return this
      */
     public ARP setSenderProtocolAddress(final byte[] senderProtoAddress) {
         this.senderProtocolAddress = senderProtoAddress;
@@ -173,6 +180,7 @@
     /**
      * @param targetHWAddress
      *            the targetHardwareAddress to set
+     * @return this
      */
     public ARP setTargetHardwareAddress(final byte[] targetHWAddress) {
         this.targetHardwareAddress = targetHWAddress;
@@ -206,6 +214,7 @@
     /**
      * @param targetProtoAddress
      *            the targetProtocolAddress to set
+     * @return this
      */
     public ARP setTargetProtocolAddress(final byte[] targetProtoAddress) {
         this.targetProtocolAddress = targetProtoAddress;
diff --git a/utils/misc/src/main/java/org/onlab/packet/Data.java b/utils/misc/src/main/java/org/onlab/packet/Data.java
index 311cc93..f3a1092 100644
--- a/utils/misc/src/main/java/org/onlab/packet/Data.java
+++ b/utils/misc/src/main/java/org/onlab/packet/Data.java
@@ -33,7 +33,7 @@
     }
 
     /**
-     * @param data
+     * @param data the data
      */
     public Data(final byte[] data) {
         this.data = data;
@@ -49,6 +49,7 @@
     /**
      * @param data
      *            the data to set
+     * @return self
      */
     public Data setData(final byte[] data) {
         this.data = data;
diff --git a/utils/misc/src/main/java/org/onlab/packet/IPacket.java b/utils/misc/src/main/java/org/onlab/packet/IPacket.java
index f1f01e4..6e2f2a0 100644
--- a/utils/misc/src/main/java/org/onlab/packet/IPacket.java
+++ b/utils/misc/src/main/java/org/onlab/packet/IPacket.java
@@ -64,7 +64,7 @@
     /**
      * Deserializes this packet layer and all possible payloads.
      *
-     * @param data
+     * @param data bytes to deserialize
      * @param offset
      *            offset to start deserializing from
      * @param length
diff --git a/utils/misc/src/main/java/org/onlab/util/HexString.java b/utils/misc/src/main/java/org/onlab/util/HexString.java
index 4e46a25..3e9ae03 100644
--- a/utils/misc/src/main/java/org/onlab/util/HexString.java
+++ b/utils/misc/src/main/java/org/onlab/util/HexString.java
@@ -24,7 +24,7 @@
     /**
      * Convert a string of bytes to a ':' separated hex string.
      *
-     * @param bytes
+     * @param bytes string of bytes to convert
      * @return "0f:ca:fe:de:ad:be:ef"
      */
     public static String toHexString(final byte[] bytes) {
diff --git a/utils/netty/src/main/java/org/onlab/netty/MessagingService.java b/utils/netty/src/main/java/org/onlab/netty/MessagingService.java
index 8c4f4ee..9277448 100644
--- a/utils/netty/src/main/java/org/onlab/netty/MessagingService.java
+++ b/utils/netty/src/main/java/org/onlab/netty/MessagingService.java
@@ -29,7 +29,7 @@
      * @param ep end point to send the message to.
      * @param type type of message.
      * @param payload message payload bytes.
-     * @throws IOException
+     * @throws IOException when I/O exception of some sort has occurred
      */
     public void sendAsync(Endpoint ep, String type, byte[] payload) throws IOException;
 
@@ -39,7 +39,7 @@
      * @param type type of message.
      * @param payload message payload.
      * @return a response future
-     * @throws IOException
+     * @throws IOException when I/O exception of some sort has occurred
      */
     public ListenableFuture<byte[]> sendAndReceive(Endpoint ep, String type, byte[] payload) throws IOException;
 
diff --git a/utils/nio/src/main/java/org/onlab/nio/IOLoop.java b/utils/nio/src/main/java/org/onlab/nio/IOLoop.java
index 9d417ac..106df7b 100644
--- a/utils/nio/src/main/java/org/onlab/nio/IOLoop.java
+++ b/utils/nio/src/main/java/org/onlab/nio/IOLoop.java
@@ -107,6 +107,7 @@
      * Completes connection request pending on the given selection key.
      *
      * @param key selection key holding the pending connect operation.
+     * @throws IOException when I/O exception of some sort has occurred
      */
     protected void connect(SelectionKey key) throws IOException {
         SocketChannel ch = (SocketChannel) key.channel();
diff --git a/utils/nio/src/main/java/org/onlab/nio/SelectorLoop.java b/utils/nio/src/main/java/org/onlab/nio/SelectorLoop.java
index 4f3220d..605e0a9 100644
--- a/utils/nio/src/main/java/org/onlab/nio/SelectorLoop.java
+++ b/utils/nio/src/main/java/org/onlab/nio/SelectorLoop.java
@@ -74,6 +74,7 @@
 
     /**
      * Indicates that the loop is marked to run.
+     * @return true if the loop is marked to run
      */
     protected boolean isRunning() {
         return state == State.STARTED || state == State.STARTING;
diff --git a/utils/thirdparty/src/main/java/org/onlab/thirdparty/OnlabThirdparty.java b/utils/thirdparty/src/main/java/org/onlab/thirdparty/OnlabThirdparty.java
index 9c9b03f..7405558 100644
--- a/utils/thirdparty/src/main/java/org/onlab/thirdparty/OnlabThirdparty.java
+++ b/utils/thirdparty/src/main/java/org/onlab/thirdparty/OnlabThirdparty.java
@@ -18,7 +18,7 @@
 
 /**
  * Empty class required to get the onlab-thirdparty module to build properly.
- * <p/>
+ *
  * TODO Figure out how to remove this.
  */
 public class OnlabThirdparty {
