diff --git a/apps/metrics/src/main/java/org/onosproject/metrics/intent/IntentMetricsService.java b/apps/metrics/src/main/java/org/onosproject/metrics/intent/IntentMetricsService.java
index dd57a6b..aa03e39 100644
--- a/apps/metrics/src/main/java/org/onosproject/metrics/intent/IntentMetricsService.java
+++ b/apps/metrics/src/main/java/org/onosproject/metrics/intent/IntentMetricsService.java
@@ -28,47 +28,47 @@
      *
      * @return the last saved intent events
      */
-    public List<IntentEvent> getEvents();
+    List<IntentEvent> getEvents();
 
     /**
      * Gets the Event Metric for the intent INSTALL_REQ events.
      *
      * @return the Event Metric for the intent INSTALL_REQ events
      */
-    public EventMetric intentSubmittedEventMetric();
+    EventMetric intentSubmittedEventMetric();
 
     /**
      * Gets the Event Metric for the intent INSTALLED events.
      *
      * @return the Event Metric for the intent INSTALLED events
      */
-    public EventMetric intentInstalledEventMetric();
+    EventMetric intentInstalledEventMetric();
 
     /**
      * Gets the Event Metric for the intent FAILED events.
      *
      * @return the Event Metric for the intent FAILED events
      */
-    public EventMetric intentFailedEventMetric();
+    EventMetric intentFailedEventMetric();
 
     /**
      * Gets the Event Metric for the intent WITHDRAW_REQ events.
      *
      * @return the Event Metric for the intent WITHDRAW_REQ events
      */
-    public EventMetric intentWithdrawRequestedEventMetric();
+    EventMetric intentWithdrawRequestedEventMetric();
 
     /**
      * Gets the Event Metric for the intent WITHDRAWN events.
      *
      * @return the Event Metric for the intent WITHDRAWN events
      */
-    public EventMetric intentWithdrawnEventMetric();
+    EventMetric intentWithdrawnEventMetric();
 
     /**
      * Gets the Event Metric for the intent PURGED events.
      *
      * @return the Event Metric for the intent PURGED events
      */
-    public EventMetric intentPurgedEventMetric();
+    EventMetric intentPurgedEventMetric();
 }
diff --git a/apps/metrics/src/main/java/org/onosproject/metrics/topology/TopologyMetricsService.java b/apps/metrics/src/main/java/org/onosproject/metrics/topology/TopologyMetricsService.java
index 70166f8..47e46b2 100644
--- a/apps/metrics/src/main/java/org/onosproject/metrics/topology/TopologyMetricsService.java
+++ b/apps/metrics/src/main/java/org/onosproject/metrics/topology/TopologyMetricsService.java
@@ -28,40 +28,40 @@
      *
      * @return the last saved topology events
      */
-    public List<Event> getEvents();
+    List<Event> getEvents();
 
     /**
      * Gets the Event Metric for the Device Events.
      *
      * @return the Event Metric for the Device Events
      */
-    public EventMetric topologyDeviceEventMetric();
+    EventMetric topologyDeviceEventMetric();
 
     /**
      * Gets the Event Metric for the Host Events.
      *
      * @return the Event Metric for the Host Events
      */
-    public EventMetric topologyHostEventMetric();
+    EventMetric topologyHostEventMetric();
 
     /**
      * Gets the Event Metric for the Link Events.
      *
      * @return the Event Metric for the Link Events
      */
-    public EventMetric topologyLinkEventMetric();
+    EventMetric topologyLinkEventMetric();
 
     /**
      * Gets the Event Metric for the Topology Graph Events.
      *
      * @return the Event Metric for the Topology Graph Events
      */
-    public EventMetric topologyGraphEventMetric();
+    EventMetric topologyGraphEventMetric();
 
     /**
      * Gets the Event Metric for the Topology Graph Reasons Events.
      *
      * @return the Event Metric for the Topology Graph Reasons Events
      */
-    public EventMetric topologyGraphReasonsEventMetric();
+    EventMetric topologyGraphReasonsEventMetric();
 }
diff --git a/apps/routing-api/src/main/java/org/onosproject/routing/RouteListener.java b/apps/routing-api/src/main/java/org/onosproject/routing/RouteListener.java
index f1a3d2b..8575216 100644
--- a/apps/routing-api/src/main/java/org/onosproject/routing/RouteListener.java
+++ b/apps/routing-api/src/main/java/org/onosproject/routing/RouteListener.java
@@ -26,5 +26,5 @@
      *
      * @param routeUpdates the collection with updated route information
      */
-    public void update(Collection<RouteUpdate> routeUpdates);
+    void update(Collection<RouteUpdate> routeUpdates);
 }
diff --git a/apps/routing-api/src/main/java/org/onosproject/routing/RoutingService.java b/apps/routing-api/src/main/java/org/onosproject/routing/RoutingService.java
index 4356984..7774082 100644
--- a/apps/routing-api/src/main/java/org/onosproject/routing/RoutingService.java
+++ b/apps/routing-api/src/main/java/org/onosproject/routing/RoutingService.java
@@ -29,7 +29,7 @@
     /**
      * Specifies the type of an IP address or an IP prefix location.
      */
-    public static enum LocationType {
+    static enum LocationType {
         /**
          * The location of an IP address or an IP prefix is in local SDN network.
          */
@@ -50,7 +50,7 @@
      * We classify traffic by the first packet of each traffic.
      * </p>
      */
-    public enum TrafficType {
+    enum TrafficType {
         /**
          * Traffic from a host located in local SDN network wants to
          * communicate with destination host located in Internet (outside
@@ -86,14 +86,14 @@
     /**
      * Starts the routing service.
      */
-    public void start();
+    void start();
 
     /**
      * Adds FIB listener.
      *
      * @param fibListener listener to send FIB updates to
      */
-    public void addFibListener(FibListener fibListener);
+    void addFibListener(FibListener fibListener);
 
     /**
      * Adds intent creation and submission listener.
@@ -101,27 +101,27 @@
      * @param intentRequestListener listener to send intent creation and
      *        submission request to
      */
-    public void addIntentRequestListener(IntentRequestListener
+    void addIntentRequestListener(IntentRequestListener
                                          intentRequestListener);
 
     /**
      * Stops the routing service.
      */
-    public void stop();
+    void stop();
 
     /**
      * Gets all IPv4 routes known to SDN-IP.
      *
      * @return the SDN-IP IPv4 routes
      */
-    public Collection<RouteEntry> getRoutes4();
+    Collection<RouteEntry> getRoutes4();
 
     /**
      * Gets all IPv6 routes known to SDN-IP.
      *
      * @return the SDN-IP IPv6 routes
      */
-    public Collection<RouteEntry> getRoutes6();
+    Collection<RouteEntry> getRoutes6();
 
     /**
      * Evaluates the location of an IP address and returns the location type.
@@ -129,7 +129,7 @@
      * @param ipAddress the IP address to evaluate
      * @return the IP address location type
      */
-    public LocationType getLocationType(IpAddress ipAddress);
+    LocationType getLocationType(IpAddress ipAddress);
 
     /**
      * Finds out the route entry which has the longest matchable IP prefix.
@@ -138,7 +138,7 @@
      * @return a route entry which has the longest matchable IP prefix if
      * found, otherwise null
      */
-    public RouteEntry getLongestMatchableRouteEntry(IpAddress ipAddress);
+    RouteEntry getLongestMatchableRouteEntry(IpAddress ipAddress);
 
     /**
      * Finds out the egress connect point where to emit the first packet
@@ -147,7 +147,7 @@
      * @param dstIpAddress the destination IP address
      * @return the egress connect point if found, otherwise null
      */
-    public ConnectPoint getEgressConnectPoint(IpAddress dstIpAddress);
+    ConnectPoint getEgressConnectPoint(IpAddress dstIpAddress);
 
     /**
      * Routes packet reactively.
@@ -157,7 +157,7 @@
      * @param srcConnectPoint the connect point where a packet comes from
      * @param srcMacAddress the source MAC address of a packet
      */
-    public void packetReactiveProcessor(IpAddress dstIpAddress,
+    void packetReactiveProcessor(IpAddress dstIpAddress,
                                         IpAddress srcIpAddress,
                                         ConnectPoint srcConnectPoint,
                                         MacAddress srcMacAddress);
diff --git a/apps/routing-api/src/main/java/org/onosproject/routing/config/RoutingConfigurationService.java b/apps/routing-api/src/main/java/org/onosproject/routing/config/RoutingConfigurationService.java
index 4ed9e2c..0afc94b 100644
--- a/apps/routing-api/src/main/java/org/onosproject/routing/config/RoutingConfigurationService.java
+++ b/apps/routing-api/src/main/java/org/onosproject/routing/config/RoutingConfigurationService.java
@@ -33,21 +33,21 @@
      *
      * @return the map of BGP speaker names to BGP speaker objects
      */
-    public Map<String, BgpSpeaker> getBgpSpeakers();
+    Map<String, BgpSpeaker> getBgpSpeakers();
 
     /**
      * Gets the list of configured BGP peers.
      *
      * @return the map from peer IP address to BgpPeer object
      */
-    public Map<IpAddress, BgpPeer> getBgpPeers();
+    Map<IpAddress, BgpPeer> getBgpPeers();
 
     /**
      * Gets the MAC address configured for virtual gateway in SDN network.
      *
      * @return the MAC address of virtual gateway
      */
-    public MacAddress getVirtualGatewayMacAddress();
+    MacAddress getVirtualGatewayMacAddress();
 
     /**
      * Evaluates whether an IP address is a virtual gateway IP address.
@@ -55,7 +55,7 @@
      * @param ipAddress the IP address to evaluate
      * @return true if the IP address is a virtual gateway address, otherwise false
      */
-    public boolean isVirtualGatewayIpAddress(IpAddress ipAddress);
+    boolean isVirtualGatewayIpAddress(IpAddress ipAddress);
 
     /**
      * Evaluates whether an IP address belongs to local SDN network.
@@ -63,7 +63,7 @@
      * @param ipAddress the IP address to evaluate
      * @return true if the IP address belongs to local SDN network, otherwise false
      */
-    public boolean isIpAddressLocal(IpAddress ipAddress);
+    boolean isIpAddressLocal(IpAddress ipAddress);
 
     /**
      * Evaluates whether an IP prefix belongs to local SDN network.
@@ -71,7 +71,7 @@
      * @param ipPrefix the IP prefix to evaluate
      * @return true if the IP prefix belongs to local SDN network, otherwise false
      */
-    public boolean isIpPrefixLocal(IpPrefix ipPrefix);
+    boolean isIpPrefixLocal(IpPrefix ipPrefix);
 
     /**
      * Retrieves the entire set of interfaces in the network.
diff --git a/apps/routing/src/main/java/org/onosproject/routing/bgp/BgpInfoService.java b/apps/routing/src/main/java/org/onosproject/routing/bgp/BgpInfoService.java
index d7914e6..ee8fef1 100644
--- a/apps/routing/src/main/java/org/onosproject/routing/bgp/BgpInfoService.java
+++ b/apps/routing/src/main/java/org/onosproject/routing/bgp/BgpInfoService.java
@@ -27,19 +27,19 @@
      *
      * @return the BGP sessions
      */
-    public Collection<BgpSession> getBgpSessions();
+    Collection<BgpSession> getBgpSessions();
 
     /**
      * Gets the selected IPv4 BGP routes among all BGP sessions.
      *
      * @return the selected IPv4 BGP routes among all BGP sessions
      */
-    public Collection<BgpRouteEntry> getBgpRoutes4();
+    Collection<BgpRouteEntry> getBgpRoutes4();
 
     /**
      * Gets the selected IPv6 BGP routes among all BGP sessions.
      *
      * @return the selected IPv6 BGP routes among all BGP sessions
      */
-    public Collection<BgpRouteEntry> getBgpRoutes6();
+    Collection<BgpRouteEntry> getBgpRoutes6();
 }
diff --git a/apps/sdnip/src/main/java/org/onosproject/sdnip/SdnIpService.java b/apps/sdnip/src/main/java/org/onosproject/sdnip/SdnIpService.java
index 9eeee1d..d26d306 100644
--- a/apps/sdnip/src/main/java/org/onosproject/sdnip/SdnIpService.java
+++ b/apps/sdnip/src/main/java/org/onosproject/sdnip/SdnIpService.java
@@ -26,6 +26,6 @@
      *
      * @param isPrimary true if the instance is primary, false if it is not
      */
-    public void modifyPrimary(boolean isPrimary);
+    void modifyPrimary(boolean isPrimary);
 
 }
diff --git a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfigService.java b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfigService.java
index 722d50c..9c4ad6e 100644
--- a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfigService.java
+++ b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/NetworkConfigService.java
@@ -23,7 +23,7 @@
      * Suggests the action to be taken by the caller given the configuration
      * associated with the queried network-object (eg. switch, link etc.).
      */
-    public enum NetworkConfigState {
+    enum NetworkConfigState {
         /**
          * Associated network object has been configured to not be allowed in
          * the network.
@@ -49,7 +49,7 @@
      * parameters to the caller, in response to a query for the configuration
      * associated with a switch.
      */
-    public class SwitchConfigStatus {
+    class SwitchConfigStatus {
         private NetworkConfigState configState;
         private SwitchConfig switchConfig;
         private String msg;
@@ -107,7 +107,7 @@
      * parameters to the caller, in response to a query for the configuration
      * associated with a link.
      */
-    public class LinkConfigStatus {
+    class LinkConfigStatus {
         private NetworkConfigState configState;
         private LinkConfig linkConfig;
         private String msg;
@@ -169,7 +169,7 @@
      * @param dpid device id of the switch to be queried
      * @return SwitchConfigStatus with outcome of check and associated config.
      */
-    public SwitchConfigStatus checkSwitchConfig(DeviceId dpid);
+    SwitchConfigStatus checkSwitchConfig(DeviceId dpid);
 
     /**
      * Reserved for future use.
@@ -193,7 +193,7 @@
      * @param linkTuple unidirectional link to be queried
      * @return LinkConfigStatus with outcome of check and associated config.
      */
-    public LinkConfigStatus checkLinkConfig(Link linkTuple);
+    LinkConfigStatus checkLinkConfig(Link linkTuple);
 
     /**
      * Retrieves a list of switches that have been configured, and have been
@@ -212,7 +212,7 @@
      *
      * @return a non-null List of SwitchConfig which may be empty
      */
-    public List<SwitchConfig> getConfiguredAllowedSwitches();
+    List<SwitchConfig> getConfiguredAllowedSwitches();
 
     /**
      * Reserved for future use.
@@ -237,7 +237,7 @@
      *
      * @return a non-null List of LinkConfig which may be empty
      */
-    public List<LinkConfig> getConfiguredAllowedLinks();
+    List<LinkConfig> getConfiguredAllowedLinks();
 
     /**
      * Retrieves the Dpid associated with a 'name' for a configured switch
@@ -248,6 +248,6 @@
      * @return the Dpid corresponding to a given 'name', or null if no
      *         configured switch was found for the given 'name'.
      */
-    public DeviceId getDpidForName(String name);
+    DeviceId getDpidForName(String name);
 
 }
diff --git a/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngConfigurationService.java b/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngConfigurationService.java
index 382f522..ac498dc 100644
--- a/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngConfigurationService.java
+++ b/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngConfigurationService.java
@@ -28,14 +28,14 @@
      *
      * @return the IP address of next hop
      */
-    public IpAddress getNextHopIpAddress();
+    IpAddress getNextHopIpAddress();
 
     /**
      * Gets the MAC address configured for all the public IP addresses.
      *
      * @return the MAC address
      */
-    public MacAddress getPublicFacingMac();
+    MacAddress getPublicFacingMac();
 
     /**
      * Evaluates whether an IP address is an assigned public IP address.
@@ -44,7 +44,7 @@
      * @return true if the input IP address is an assigned public IP address,
      *         otherwise false
      */
-    public boolean isAssignedPublicIpAddress(IpAddress ipAddress);
+    boolean isAssignedPublicIpAddress(IpAddress ipAddress);
 
     /**
      * Gets an available public IP address from local public IP prefixes.
@@ -52,7 +52,7 @@
      * @param privateIpAddress a private IP address
      * @return an available public IP address if it exists, otherwise null
      */
-    public IpAddress getAvailablePublicIpAddress(IpAddress privateIpAddress);
+    IpAddress getAvailablePublicIpAddress(IpAddress privateIpAddress);
 
     /**
      * Gets the public IP address already assigned for a private IP address.
@@ -60,5 +60,5 @@
      * @param privateIpAddress a private IP address
      * @return the assigned public IP address if it exists, otherwise null
      */
-    public IpAddress getAssignedPublicIpAddress(IpAddress privateIpAddress);
+    IpAddress getAssignedPublicIpAddress(IpAddress privateIpAddress);
 }
diff --git a/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngService.java b/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngService.java
index 26e6e10..4ac7606 100644
--- a/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngService.java
+++ b/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VbngService.java
@@ -34,6 +34,6 @@
      * @return the public address if a virtual BGN is successfully created,
      *         otherwise return null
      */
-    public IpAddress createVbng(IpAddress privateIpAddress);
+    IpAddress createVbng(IpAddress privateIpAddress);
 
 }
diff --git a/core/api/src/main/java/org/onosproject/core/CoreService.java b/core/api/src/main/java/org/onosproject/core/CoreService.java
index 42db086..3dfc6b2 100644
--- a/core/api/src/main/java/org/onosproject/core/CoreService.java
+++ b/core/api/src/main/java/org/onosproject/core/CoreService.java
@@ -27,12 +27,12 @@
     /**
      * Name of the core "application".
      */
-    public static final String CORE_APP_NAME = "org.onosproject.core";
+    static final String CORE_APP_NAME = "org.onosproject.core";
 
     /**
      * Identifier of the core "provider".
      */
-    public static final ProviderId CORE_PROVIDER_ID = new ProviderId("core", CORE_APP_NAME);
+    static final ProviderId CORE_PROVIDER_ID = new ProviderId("core", CORE_APP_NAME);
 
     /**
      * Returns the product version.
diff --git a/core/api/src/main/java/org/onosproject/net/Annotations.java b/core/api/src/main/java/org/onosproject/net/Annotations.java
index db16143..4ed7060 100644
--- a/core/api/src/main/java/org/onosproject/net/Annotations.java
+++ b/core/api/src/main/java/org/onosproject/net/Annotations.java
@@ -27,7 +27,7 @@
      *
      * @return annotation keys
      */
-    public Set<String> keys();
+    Set<String> keys();
 
     /**
      * Returns the value of the specified annotation.
@@ -35,6 +35,6 @@
      * @param key annotation key
      * @return annotation value
      */
-    public String value(String key);
+    String value(String key);
 
 }
diff --git a/core/api/src/main/java/org/onosproject/net/Link.java b/core/api/src/main/java/org/onosproject/net/Link.java
index e7bb96f..2dc8eec 100644
--- a/core/api/src/main/java/org/onosproject/net/Link.java
+++ b/core/api/src/main/java/org/onosproject/net/Link.java
@@ -23,7 +23,7 @@
     /**
      * Coarse representation of the link type.
      */
-    public enum Type {
+    enum Type {
         /**
          * Signifies that this is a direct single-segment link.
          */
@@ -59,7 +59,7 @@
      * configured durable links, i.e. those that need to remain present,
      * but instead be marked as inactive.
      */
-    public enum State {
+    enum State {
         /**
          * Signifies that a link is currently active.
          */
diff --git a/core/api/src/main/java/org/onosproject/net/MutableAnnotations.java b/core/api/src/main/java/org/onosproject/net/MutableAnnotations.java
index c2ea09e..9b7f328 100644
--- a/core/api/src/main/java/org/onosproject/net/MutableAnnotations.java
+++ b/core/api/src/main/java/org/onosproject/net/MutableAnnotations.java
@@ -27,7 +27,7 @@
      * @param value annotation value
      * @return self
      */
-    public MutableAnnotations set(String key, String value);
+    MutableAnnotations set(String key, String value);
 
     /**
      * Clears the specified keys or the all keys if none were specified.
@@ -35,6 +35,6 @@
      * @param keys keys to be cleared
      * @return self
      */
-    public MutableAnnotations clear(String... keys);
+    MutableAnnotations clear(String... keys);
 
 }
diff --git a/core/api/src/main/java/org/onosproject/net/Port.java b/core/api/src/main/java/org/onosproject/net/Port.java
index 70b05d7..87d7535 100644
--- a/core/api/src/main/java/org/onosproject/net/Port.java
+++ b/core/api/src/main/java/org/onosproject/net/Port.java
@@ -22,7 +22,7 @@
 public interface Port extends Annotated {
 
     /** Represents coarse port type classification. */
-    public enum Type {
+    enum Type {
         /**
          * Signifies copper-based connectivity.
          */
diff --git a/core/api/src/main/java/org/onosproject/net/SparseAnnotations.java b/core/api/src/main/java/org/onosproject/net/SparseAnnotations.java
index e86b50c..97961b3 100644
--- a/core/api/src/main/java/org/onosproject/net/SparseAnnotations.java
+++ b/core/api/src/main/java/org/onosproject/net/SparseAnnotations.java
@@ -30,7 +30,7 @@
      * </p>
      */
     @Override
-    public Set<String> keys();
+    Set<String> keys();
 
     /**
      * Indicates whether the specified key has been tagged as removed. This is
@@ -39,6 +39,6 @@
      * @param key annotation key
      * @return true if the previous annotation has been tagged for removal
      */
-    public boolean isRemoved(String key);
+    boolean isRemoved(String key);
 
 }
diff --git a/core/api/src/main/java/org/onosproject/net/device/DeviceClockProviderService.java b/core/api/src/main/java/org/onosproject/net/device/DeviceClockProviderService.java
index 58f0f6b1..3901deb 100644
--- a/core/api/src/main/java/org/onosproject/net/device/DeviceClockProviderService.java
+++ b/core/api/src/main/java/org/onosproject/net/device/DeviceClockProviderService.java
@@ -30,7 +30,7 @@
      * @param deviceId device identifier.
      * @return true if timestamp can be issued for specified device
      */
-    public boolean isTimestampAvailable(DeviceId deviceId);
+    boolean isTimestampAvailable(DeviceId deviceId);
 
     /**
      * Updates the mastership term for the specified deviceId.
@@ -38,5 +38,5 @@
      * @param deviceId device identifier.
      * @param term mastership term.
      */
-    public void setMastershipTerm(DeviceId deviceId, MastershipTerm term);
+    void setMastershipTerm(DeviceId deviceId, MastershipTerm term);
 }
diff --git a/core/api/src/main/java/org/onosproject/net/device/DeviceClockService.java b/core/api/src/main/java/org/onosproject/net/device/DeviceClockService.java
index 70b3715..5391999 100644
--- a/core/api/src/main/java/org/onosproject/net/device/DeviceClockService.java
+++ b/core/api/src/main/java/org/onosproject/net/device/DeviceClockService.java
@@ -29,7 +29,7 @@
      * @param deviceId device identifier.
      * @return true if timestamp can be issued for specified device
      */
-    public boolean isTimestampAvailable(DeviceId deviceId);
+    boolean isTimestampAvailable(DeviceId deviceId);
 
     /**
      * Returns a new timestamp for the specified deviceId.
@@ -37,5 +37,5 @@
      * @param deviceId device identifier.
      * @return timestamp.
      */
-    public Timestamp getTimestamp(DeviceId deviceId);
+    Timestamp getTimestamp(DeviceId deviceId);
 }
diff --git a/core/api/src/main/java/org/onosproject/net/device/PortStatistics.java b/core/api/src/main/java/org/onosproject/net/device/PortStatistics.java
index b72d4e6..201bd7b 100644
--- a/core/api/src/main/java/org/onosproject/net/device/PortStatistics.java
+++ b/core/api/src/main/java/org/onosproject/net/device/PortStatistics.java
@@ -25,76 +25,76 @@
      *
      * @return port number
      */
-    public int  port();
+    int  port();
 
     /**
      * Returns the number of packets received.
      *
      * @return the number of packets received
      */
-    public long packetsReceived();
+    long packetsReceived();
 
     /**
      * Returns the number of packets sent.
      *
      * @return the number of packets sent
      */
-    public long packetsSent();
+    long packetsSent();
 
     /**
      * Returns the bytes received.
      *
      * @return the bytes received
      */
-    public long bytesReceived();
+    long bytesReceived();
 
     /**
      * Returns the bytes sent.
      *
      * @return the bytes sent
      */
-    public long bytesSent();
+    long bytesSent();
 
     /**
      * Returns the number of packets dropped by RX.
      *
      * @return the number of packets dropped by RX
      */
-    public long packetsRxDropped();
+    long packetsRxDropped();
 
     /**
      * Returns the number of packets dropped by TX.
      *
      * @return the number of packets dropped by TX
      */
-    public long packetsTxDropped();
+    long packetsTxDropped();
 
     /**
      * Returns the number of transmit errors.
      *
      * @return the number of transmit errors
      */
-    public long packetsRxErrors();
+    long packetsRxErrors();
 
     /**
      * Returns the number of receive errors.
      *
      * @return the number of receive error
      */
-    public long packetsTxErrors();
+    long packetsTxErrors();
 
     /**
      * Returns the time port has been alive in seconds.
      *
      * @return the time port has been alive in seconds
      */
-    public long durationSec();
+    long durationSec();
 
     /**
      * Returns the time port has been alive in nano seconds.
      *
      * @return the time port has been alive in nano seconds
      */
-    public long durationNano();
+    long durationNano();
 
 }
diff --git a/core/api/src/main/java/org/onosproject/net/flow/FlowEntry.java b/core/api/src/main/java/org/onosproject/net/flow/FlowEntry.java
index 401ef0e..32da179 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/FlowEntry.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/FlowEntry.java
@@ -23,7 +23,7 @@
 public interface FlowEntry extends FlowRule {
 
 
-    public enum FlowEntryState {
+    enum FlowEntryState {
 
         /**
          * Indicates that this rule has been submitted for addition.
diff --git a/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java b/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java
index 6497e11..9a32d0f 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java
@@ -34,7 +34,7 @@
      * Default is used.
      */
     @Deprecated
-    public static enum Type {
+    static enum Type {
         /*
          * Default type - used in flow rule for single table switch NOTE: this
          * setting should not be used as Table 0 in a multi-table pipeline
@@ -138,7 +138,7 @@
     /**
      * A flowrule builder.
      */
-    public interface Builder {
+    interface Builder {
 
         /**
          * Assigns a cookie value to this flowrule. Mutually exclusive with the
diff --git a/core/api/src/main/java/org/onosproject/net/flow/criteria/Criterion.java b/core/api/src/main/java/org/onosproject/net/flow/criteria/Criterion.java
index 5712c90..12ab57d 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/criteria/Criterion.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/criteria/Criterion.java
@@ -25,7 +25,7 @@
      * Types of fields to which the selection criterion may apply.
      */
     // From page 75 of OpenFlow 1.5.0 spec
-    public enum Type {
+    enum Type {
         /** Switch input port. */
         IN_PORT,
         /** Switch physical input port. */
@@ -137,13 +137,13 @@
      *
      * @return type of criterion
      */
-    public Type type();
+    Type type();
 
     /**
      * Bit definitions for IPv6 Extension Header pseudo-field.
      * From page 79 of OpenFlow 1.5.0 spec.
      */
-    public enum IPv6ExthdrFlags {
+    enum IPv6ExthdrFlags {
         /** "No next header" encountered. */
         NONEXT((short) (1 << 0)),
         /** Encrypted Sec Payload header present. */
diff --git a/core/api/src/main/java/org/onosproject/net/flowobjective/FilteringObjective.java b/core/api/src/main/java/org/onosproject/net/flowobjective/FilteringObjective.java
index 89b668d..d037764 100644
--- a/core/api/src/main/java/org/onosproject/net/flowobjective/FilteringObjective.java
+++ b/core/api/src/main/java/org/onosproject/net/flowobjective/FilteringObjective.java
@@ -45,13 +45,13 @@
      *
      * @return a criterion
      */
-    public Criterion key();
+    Criterion key();
 
     /**
      * Obtain this filtering type.
      * @return the type
      */
-    public Type type();
+    Type type();
 
     /**
      * The set of conditions the filter must provision at the device.
@@ -63,7 +63,7 @@
     /**
      * Builder of Filtering objective entities.
      */
-    public interface Builder extends Objective.Builder {
+    interface Builder extends Objective.Builder {
 
         /**
          * Specify the key for the filter.
@@ -71,7 +71,7 @@
          * @param key a criterion
          * @return a filter objective builder
          */
-        public Builder withKey(Criterion key);
+        Builder withKey(Criterion key);
 
         /**
          * Add a filtering condition.
@@ -79,40 +79,40 @@
          * @param criterion new criterion
          * @return a filtering builder
          */
-        public Builder addCondition(Criterion criterion);
+        Builder addCondition(Criterion criterion);
 
         /**
          * Permit this filtering condition set.
          * @return a filtering builder
          */
-        public Builder permit();
+        Builder permit();
 
         /**
          * Deny this filtering condition set.
          * @return a filtering builder
          */
-        public Builder deny();
+        Builder deny();
 
         /**
          * Assigns an application id.
          * @param appId an application id
          * @return a filtering builder
          */
-        public Builder fromApp(ApplicationId appId);
+        Builder fromApp(ApplicationId appId);
 
         /**
          * Builds the filtering objective that will be added.
          *
          * @return a filtering objective
          */
-        public FilteringObjective add();
+        FilteringObjective add();
 
         /**
          * Builds the filtering objective that will be removed.
          *
          * @return a filtering objective.
          */
-        public FilteringObjective remove();
+        FilteringObjective remove();
 
         /**
          * Builds the filtering objective that will be added.
@@ -121,7 +121,7 @@
          * @param context an objective context
          * @return a filtering objective
          */
-        public FilteringObjective add(ObjectiveContext context);
+        FilteringObjective add(ObjectiveContext context);
 
         /**
          * Builds the filtering objective that will be removed.
@@ -130,7 +130,7 @@
          * @param context an objective context
          * @return a filtering objective
          */
-        public FilteringObjective remove(ObjectiveContext context);
+        FilteringObjective remove(ObjectiveContext context);
 
 
     }
diff --git a/core/api/src/main/java/org/onosproject/net/flowobjective/ForwardingObjective.java b/core/api/src/main/java/org/onosproject/net/flowobjective/ForwardingObjective.java
index dcc377f..d825b99 100644
--- a/core/api/src/main/java/org/onosproject/net/flowobjective/ForwardingObjective.java
+++ b/core/api/src/main/java/org/onosproject/net/flowobjective/ForwardingObjective.java
@@ -74,7 +74,7 @@
     /**
      * A forwarding objective builder.
      */
-    public interface Builder extends Objective.Builder {
+    interface Builder extends Objective.Builder {
 
         /**
          * Assigns a selector to the forwarding objective.
@@ -82,7 +82,7 @@
          * @param selector a traffic selector
          * @return a forwarding objective builder
          */
-        public Builder withSelector(TrafficSelector selector);
+        Builder withSelector(TrafficSelector selector);
 
         /**
          * Assigns a next step to the forwarding objective.
@@ -90,7 +90,7 @@
          * @param nextId a next objective id.
          * @return a forwarding objective builder
          */
-        public Builder nextStep(int nextId);
+        Builder nextStep(int nextId);
 
         /**
          * Assigns the treatment for this forwarding objective.
@@ -98,7 +98,7 @@
          * @param treatment a traffic treatment
          * @return a forwarding objective
          */
-        public Builder withTreatment(TrafficTreatment treatment);
+        Builder withTreatment(TrafficTreatment treatment);
 
         /**
          * Assigns the flag to the forwarding objective.
@@ -106,21 +106,21 @@
          * @param flag a flag
          * @return a forwarding objective builder
          */
-        public Builder withFlag(Flag flag);
+        Builder withFlag(Flag flag);
 
         /**
          * Builds the forwarding objective that will be added.
          *
          * @return a forwarding objective
          */
-        public ForwardingObjective add();
+        ForwardingObjective add();
 
         /**
          * Builds the forwarding objective that will be removed.
          *
          * @return a forwarding objective.
          */
-        public ForwardingObjective remove();
+        ForwardingObjective remove();
 
         /**
          * Builds the forwarding objective that will be added.
@@ -129,7 +129,7 @@
          * @param context an objective context
          * @return a forwarding objective
          */
-        public ForwardingObjective add(ObjectiveContext context);
+        ForwardingObjective add(ObjectiveContext context);
 
         /**
          * Builds the forwarding objective that will be removed.
@@ -138,6 +138,6 @@
          * @param context an objective context
          * @return a forwarding objective
          */
-        public ForwardingObjective remove(ObjectiveContext context);
+        ForwardingObjective remove(ObjectiveContext context);
     }
 }
diff --git a/core/api/src/main/java/org/onosproject/net/flowobjective/NextObjective.java b/core/api/src/main/java/org/onosproject/net/flowobjective/NextObjective.java
index 02c4d9e..229e6b5 100644
--- a/core/api/src/main/java/org/onosproject/net/flowobjective/NextObjective.java
+++ b/core/api/src/main/java/org/onosproject/net/flowobjective/NextObjective.java
@@ -70,7 +70,7 @@
     /**
      * A next step builder.
      */
-    public interface Builder extends Objective.Builder {
+    interface Builder extends Objective.Builder {
 
         /**
          * Specifies the id for this next objective.
@@ -78,7 +78,7 @@
          * @param nextId an integer
          * @return a next objective builder
          */
-        public Builder withId(int nextId);
+        Builder withId(int nextId);
 
         /**
          * Sets the type of next step.
@@ -86,7 +86,7 @@
          * @param type a type
          * @return a next step builder
          */
-        public Builder withType(Type type);
+        Builder withType(Type type);
 
         /**
          * Adds a treatment to this next step.
@@ -94,24 +94,24 @@
          * @param treatment a traffic treatment
          * @return a next step builder
          */
-        public Builder addTreatment(TrafficTreatment treatment);
+        Builder addTreatment(TrafficTreatment treatment);
 
         @Override
-        public Builder fromApp(ApplicationId appId);
+        Builder fromApp(ApplicationId appId);
 
         /**
          * Builds the next objective that will be added.
          *
          * @return a next objective
          */
-        public NextObjective add();
+        NextObjective add();
 
         /**
          * Builds the next objective that will be removed.
          *
          * @return a next objective.
          */
-        public NextObjective remove();
+        NextObjective remove();
 
         /**
          * Builds the next objective that will be added.
@@ -120,7 +120,7 @@
          * @param context an objective context
          * @return a next objective
          */
-        public NextObjective add(ObjectiveContext context);
+        NextObjective add(ObjectiveContext context);
 
         /**
          * Builds the next objective that will be removed.
@@ -129,7 +129,7 @@
          * @param context an objective context
          * @return a next objective
          */
-        public NextObjective remove(ObjectiveContext context);
+        NextObjective remove(ObjectiveContext context);
 
     }
 
diff --git a/core/api/src/main/java/org/onosproject/net/flowobjective/Objective.java b/core/api/src/main/java/org/onosproject/net/flowobjective/Objective.java
index fa98b6d..0d53a75 100644
--- a/core/api/src/main/java/org/onosproject/net/flowobjective/Objective.java
+++ b/core/api/src/main/java/org/onosproject/net/flowobjective/Objective.java
@@ -96,21 +96,21 @@
     /**
      * An objective builder.
      */
-    public interface Builder {
+    interface Builder {
         /**
          * Makes the filtering objective temporary.
          *
          * @param timeout a timeout
          * @return an objective builder
          */
-        public Builder makeTemporary(int timeout);
+        Builder makeTemporary(int timeout);
 
         /**
          * Makes the filtering objective permanent.
          *
          * @return an objective builder
          */
-        public Builder makePermanent();
+        Builder makePermanent();
 
         /**
          * Specifies the application which applied the filter.
@@ -118,7 +118,7 @@
          * @param appId an application id
          * @return an objective builder
          */
-        public Builder fromApp(ApplicationId appId);
+        Builder fromApp(ApplicationId appId);
 
         /**
          * Sets the priority for this objective.
@@ -126,7 +126,7 @@
          * @param priority an integer
          * @return an objective builder
          */
-        public Builder withPriority(int priority);
+        Builder withPriority(int priority);
     }
 
 }
diff --git a/core/api/src/main/java/org/onosproject/net/group/Group.java b/core/api/src/main/java/org/onosproject/net/group/Group.java
index b7872de..776d24f 100644
--- a/core/api/src/main/java/org/onosproject/net/group/Group.java
+++ b/core/api/src/main/java/org/onosproject/net/group/Group.java
@@ -24,7 +24,7 @@
     /**
      * State of the group object in ONOS.
      */
-    public enum GroupState {
+    enum GroupState {
         /**
          * Group create request is queued as group AUDIT is in progress.
          */
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupBucket.java b/core/api/src/main/java/org/onosproject/net/group/GroupBucket.java
index 401c769..a503c15 100644
--- a/core/api/src/main/java/org/onosproject/net/group/GroupBucket.java
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupBucket.java
@@ -32,21 +32,21 @@
      *
      * @return GroupType group type
      */
-    public GroupDescription.Type type();
+    GroupDescription.Type type();
 
     /**
      * Returns list of Traffic instructions that are part of the bucket.
      *
      * @return TrafficTreatment traffic instruction list
      */
-    public TrafficTreatment treatment();
+    TrafficTreatment treatment();
 
     /**
      * Returns weight of select group bucket.
      *
      * @return short weight associated with a bucket
      */
-    public short weight();
+    short weight();
 
     /**
      * Returns port number used for liveness detection for a
@@ -54,7 +54,7 @@
      *
      * @return PortNumber port number used for liveness detection
      */
-    public PortNumber watchPort();
+    PortNumber watchPort();
 
     /**
      * Returns group identifier used for liveness detection for a
@@ -62,7 +62,7 @@
      *
      * @return GroupId group identifier to be used for liveness detection
      */
-    public GroupId watchGroup();
+    GroupId watchGroup();
 
     /**
      * Returns the number of packets processed by this group bucket.
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupDescription.java b/core/api/src/main/java/org/onosproject/net/group/GroupDescription.java
index 4a939bd..671b9a5 100644
--- a/core/api/src/main/java/org/onosproject/net/group/GroupDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupDescription.java
@@ -27,7 +27,7 @@
     /**
      * Types of the group supported by ONOS.
      */
-    public enum Type {
+    enum Type {
         /**
          * Load-balancing among different buckets in a group.
          */
@@ -51,28 +51,28 @@
      *
      * @return GroupType group type
      */
-    public Type type();
+    Type type();
 
     /**
      * Returns device identifier on which this group object is created.
      *
      * @return DeviceId device identifier
      */
-    public DeviceId deviceId();
+    DeviceId deviceId();
 
     /**
      * Returns application identifier that has created this group object.
      *
      * @return ApplicationId application identifier
      */
-    public ApplicationId appId();
+    ApplicationId appId();
 
     /**
      * Returns application cookie associated with a group object.
      *
      * @return GroupKey application cookie
      */
-    public GroupKey appCookie();
+    GroupKey appCookie();
 
     /**
      * Returns groupId passed in by caller.
@@ -80,12 +80,12 @@
      * @return Integer group id passed in by caller. May be null if caller
      *                 passed in null to let groupService determin the group id.
      */
-    public Integer givenGroupId();
+    Integer givenGroupId();
 
     /**
      * Returns group buckets of a group.
      *
      * @return GroupBuckets immutable list of group bucket
      */
-    public GroupBuckets buckets();
+    GroupBuckets buckets();
 }
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupKey.java b/core/api/src/main/java/org/onosproject/net/group/GroupKey.java
index 9c87b83..a63bee2 100644
--- a/core/api/src/main/java/org/onosproject/net/group/GroupKey.java
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupKey.java
@@ -27,5 +27,5 @@
      *
      * @return byte array
      */
-    public byte[] key();
+    byte[] key();
 }
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupStore.java b/core/api/src/main/java/org/onosproject/net/group/GroupStore.java
index 7ccab8a..0821604 100644
--- a/core/api/src/main/java/org/onosproject/net/group/GroupStore.java
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupStore.java
@@ -24,7 +24,7 @@
  */
 public interface GroupStore extends Store<GroupEvent, GroupStoreDelegate> {
 
-    public enum UpdateType {
+    enum UpdateType {
         /**
          * Modify existing group entry by adding provided information.
          */
diff --git a/core/api/src/main/java/org/onosproject/net/host/HostClockService.java b/core/api/src/main/java/org/onosproject/net/host/HostClockService.java
index 29cac80..1d88b87 100644
--- a/core/api/src/main/java/org/onosproject/net/host/HostClockService.java
+++ b/core/api/src/main/java/org/onosproject/net/host/HostClockService.java
@@ -28,5 +28,5 @@
      * @param hostId identifier for the host.
      * @return timestamp.
      */
-    public Timestamp getTimestamp(HostId hostId);
+    Timestamp getTimestamp(HostId hostId);
 }
diff --git a/core/api/src/main/java/org/onosproject/net/host/HostService.java b/core/api/src/main/java/org/onosproject/net/host/HostService.java
index 183fe0b..6fa52ce 100644
--- a/core/api/src/main/java/org/onosproject/net/host/HostService.java
+++ b/core/api/src/main/java/org/onosproject/net/host/HostService.java
@@ -35,7 +35,7 @@
      *
      * @return number of end-station hosts
      */
-    public int getHostCount();
+    int getHostCount();
 
     /**
      * Returns a collection of all end-station hosts.
diff --git a/core/api/src/main/java/org/onosproject/net/intent/IntentClockService.java b/core/api/src/main/java/org/onosproject/net/intent/IntentClockService.java
index fb12b13..5da7215 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/IntentClockService.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/IntentClockService.java
@@ -28,5 +28,5 @@
      * @param intentId identifier for the intent.
      * @return timestamp
      */
-    public Timestamp getTimestamp(IntentId intentId);
+    Timestamp getTimestamp(IntentId intentId);
 }
diff --git a/core/api/src/main/java/org/onosproject/net/link/LinkStore.java b/core/api/src/main/java/org/onosproject/net/link/LinkStore.java
index 6955024..04c8773 100644
--- a/core/api/src/main/java/org/onosproject/net/link/LinkStore.java
+++ b/core/api/src/main/java/org/onosproject/net/link/LinkStore.java
@@ -91,7 +91,7 @@
      * @param linkDescription link description
      * @return create or update link event, or null if no change resulted
      */
-    public LinkEvent createOrUpdateLink(ProviderId providerId,
+    LinkEvent createOrUpdateLink(ProviderId providerId,
                                         LinkDescription linkDescription);
 
     /**
diff --git a/core/api/src/main/java/org/onosproject/net/packet/PacketProcessor.java b/core/api/src/main/java/org/onosproject/net/packet/PacketProcessor.java
index a0516be..810f4da 100644
--- a/core/api/src/main/java/org/onosproject/net/packet/PacketProcessor.java
+++ b/core/api/src/main/java/org/onosproject/net/packet/PacketProcessor.java
@@ -22,9 +22,9 @@
  */
 public interface PacketProcessor {
 
-    public static final int ADVISOR_MAX = Integer.MAX_VALUE / 3;
-    public static final int DIRECTOR_MAX = (Integer.MAX_VALUE / 3) * 2;
-    public static final int OBSERVER_MAX = Integer.MAX_VALUE;
+    static final int ADVISOR_MAX = Integer.MAX_VALUE / 3;
+    static final int DIRECTOR_MAX = (Integer.MAX_VALUE / 3) * 2;
+    static final int OBSERVER_MAX = Integer.MAX_VALUE;
 
     /**
      * Processes the inbound packet as specified in the given context.
diff --git a/core/api/src/main/java/org/onosproject/net/packet/PacketRequest.java b/core/api/src/main/java/org/onosproject/net/packet/PacketRequest.java
index 7a95ef4..a4e45ac 100644
--- a/core/api/src/main/java/org/onosproject/net/packet/PacketRequest.java
+++ b/core/api/src/main/java/org/onosproject/net/packet/PacketRequest.java
@@ -28,24 +28,24 @@
      * Obtain the traffic selector.
      * @return a traffic selector
      */
-    public TrafficSelector selector();
+    TrafficSelector selector();
 
     /**
      * Obtain the priority.
      * @return a PacketPriority
      */
-    public PacketPriority priority();
+    PacketPriority priority();
 
     /**
      * Obtain the application id.
      * @return an application id
      */
-    public ApplicationId appId();
+    ApplicationId appId();
 
     /**
      * Obtain the table type.
      * @return a table type
      */
-    public FlowRule.Type tableType();
+    FlowRule.Type tableType();
 
 }
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LabelResource.java b/core/api/src/main/java/org/onosproject/net/resource/LabelResource.java
index c94a7a3..eac1d81 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/LabelResource.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/LabelResource.java
@@ -13,11 +13,11 @@
      * Returns device id.
      * @return DeviceId
      */
-    public DeviceId deviceId();
+    DeviceId deviceId();
 
     /**
      * Returns labelResource Id.
      * @return LabelResourceId
      */
-    public LabelResourceId labelResourceId();
+    LabelResourceId labelResourceId();
 }
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LinkResourceRequest.java b/core/api/src/main/java/org/onosproject/net/resource/LinkResourceRequest.java
index 06671eb..d0ed945 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/LinkResourceRequest.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/LinkResourceRequest.java
@@ -57,14 +57,14 @@
          *
          * @return self
          */
-        public Builder addLambdaRequest();
+        Builder addLambdaRequest();
 
         /**
         * Adds MPLS request.
         *
         * @return self
         */
-       public Builder addMplsRequest();
+       Builder addMplsRequest();
 
         /**
          * Adds bandwidth request with bandwidth value.
@@ -72,7 +72,7 @@
          * @param bandwidth bandwidth value to be requested
          * @return self
          */
-        public Builder addBandwidthRequest(double bandwidth);
+        Builder addBandwidthRequest(double bandwidth);
 
         /**
          * Adds the resources required for a constraint.
@@ -80,13 +80,13 @@
          * @param constraint the constraint
          * @return self
          */
-        public Builder addConstraint(Constraint constraint);
+        Builder addConstraint(Constraint constraint);
 
         /**
          * Returns link resource request.
          *
          * @return link resource request
          */
-        public LinkResourceRequest build();
+        LinkResourceRequest build();
     }
 }
diff --git a/core/api/src/main/java/org/onosproject/net/resource/LinkResources.java b/core/api/src/main/java/org/onosproject/net/resource/LinkResources.java
index 7352afa..71fb4f4 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/LinkResources.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/LinkResources.java
@@ -32,7 +32,7 @@
     /**
      * Builder of {@link LinkResources}.
      */
-    public interface Builder {
+    interface Builder {
 
         /**
          * Adds bandwidth resource.
@@ -43,7 +43,7 @@
          * @param bandwidth bandwidth value to be added
          * @return self
          */
-        public Builder addBandwidth(double bandwidth);
+        Builder addBandwidth(double bandwidth);
 
         /**
          * Adds lambda resource.
@@ -51,13 +51,13 @@
          * @param lambda lambda value to be added
          * @return self
          */
-        public Builder addLambda(int lambda);
+        Builder addLambda(int lambda);
 
         /**
          * Builds an immutable link resources.
          *
          * @return link resources
          */
-        public LinkResources build();
+        LinkResources build();
     }
 }
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/Label.java b/core/api/src/main/java/org/onosproject/net/tunnel/Label.java
index fc55b13..2f9d9ed 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/Label.java
+++ b/core/api/src/main/java/org/onosproject/net/tunnel/Label.java
@@ -31,7 +31,7 @@
 public interface Label extends Annotated, Provided, NetworkResource {
 
     /** Represents coarse Label type classification. */
-    public enum Type {
+    enum Type {
         /**
          * Signifies VLAN-based tag.
          */
@@ -109,4 +109,4 @@
      * @return label type
      */
     Type type();
-}
\ No newline at end of file
+}
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/Tunnel.java b/core/api/src/main/java/org/onosproject/net/tunnel/Tunnel.java
index 6a044ac..605d70f 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/Tunnel.java
+++ b/core/api/src/main/java/org/onosproject/net/tunnel/Tunnel.java
@@ -33,7 +33,7 @@
     /**
      * Coarse representation of the Tunnel types.
      */
-    public enum Type {
+    enum Type {
         /**
          * Signifies that this is a L2 tunnel.
          */
@@ -69,7 +69,7 @@
      * Representation of the tunnel state.
      *
      */
-    public enum State {
+    enum State {
 
         /**
          * Signifies that a tunnel is currently in a initialized state.
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelStore.java b/core/api/src/main/java/org/onosproject/net/tunnel/TunnelStore.java
index c09e7f1..09c74c1 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelStore.java
+++ b/core/api/src/main/java/org/onosproject/net/tunnel/TunnelStore.java
@@ -88,7 +88,7 @@
      * @param tunnel tunnel information
      * @return create tunnel event
      */
-    public TunnelEvent addTunnel(ProviderId providerId,
+    TunnelEvent addTunnel(ProviderId providerId,
                                         Tunnel tunnel);
 
     /**
@@ -98,7 +98,7 @@
      * @param tunnel tunnel
      * @return update tunnel event
      */
-    public TunnelEvent updateTunnel(ProviderId providerId,
+    TunnelEvent updateTunnel(ProviderId providerId,
                                         Tunnel tunnel);
 
     /**
diff --git a/core/api/src/main/java/org/onosproject/store/cluster/messaging/ClusterMessageHandler.java b/core/api/src/main/java/org/onosproject/store/cluster/messaging/ClusterMessageHandler.java
index 19c7dda..ce770a8 100644
--- a/core/api/src/main/java/org/onosproject/store/cluster/messaging/ClusterMessageHandler.java
+++ b/core/api/src/main/java/org/onosproject/store/cluster/messaging/ClusterMessageHandler.java
@@ -24,5 +24,5 @@
      * Handles/Processes the cluster message.
      * @param message cluster message.
      */
-    public void handle(ClusterMessage message);
+    void handle(ClusterMessage message);
 }
diff --git a/core/api/src/main/java/org/onosproject/store/service/AtomicCounterBuilder.java b/core/api/src/main/java/org/onosproject/store/service/AtomicCounterBuilder.java
index ee8481d2..8819977 100644
--- a/core/api/src/main/java/org/onosproject/store/service/AtomicCounterBuilder.java
+++ b/core/api/src/main/java/org/onosproject/store/service/AtomicCounterBuilder.java
@@ -17,7 +17,7 @@
      * @param name name of the atomic counter
      * @return this AtomicCounterBuilder
      */
-    public AtomicCounterBuilder withName(String name);
+    AtomicCounterBuilder withName(String name);
 
     /**
      * Creates this counter on the partition that spans the entire cluster.
@@ -30,7 +30,7 @@
      * </p>
      * @return this AtomicCounterBuilder
      */
-    public AtomicCounterBuilder withPartitionsDisabled();
+    AtomicCounterBuilder withPartitionsDisabled();
 
     /**
      * Builds a AtomicCounter based on the configuration options
@@ -39,7 +39,7 @@
      * @return new AtomicCounter
      * @throws java.lang.RuntimeException if a mandatory parameter is missing
      */
-    public AtomicCounter build();
+    AtomicCounter build();
 
     /**
      * Builds a AsyncAtomicCounter based on the configuration options
@@ -48,5 +48,5 @@
      * @return new AsyncAtomicCounter
      * @throws java.lang.RuntimeException if a mandatory parameter is missing
      */
-    public AsyncAtomicCounter buildAsyncCounter();
+    AsyncAtomicCounter buildAsyncCounter();
 }
diff --git a/core/api/src/main/java/org/onosproject/store/service/ClockService.java b/core/api/src/main/java/org/onosproject/store/service/ClockService.java
index a0de0a9..12ce688 100644
--- a/core/api/src/main/java/org/onosproject/store/service/ClockService.java
+++ b/core/api/src/main/java/org/onosproject/store/service/ClockService.java
@@ -31,5 +31,5 @@
      * @param object2 Second object to use when generating timestamps
      * @return the new timestamp
      */
-    public Timestamp getTimestamp(T object1, U object2);
+    Timestamp getTimestamp(T object1, U object2);
 }
diff --git a/core/api/src/main/java/org/onosproject/store/service/ConsistentMapBuilder.java b/core/api/src/main/java/org/onosproject/store/service/ConsistentMapBuilder.java
index 6e3fba4..50d829c 100644
--- a/core/api/src/main/java/org/onosproject/store/service/ConsistentMapBuilder.java
+++ b/core/api/src/main/java/org/onosproject/store/service/ConsistentMapBuilder.java
@@ -21,7 +21,7 @@
      * @param name name of the consistent map
      * @return this ConsistentMapBuilder
      */
-    public ConsistentMapBuilder<K, V> withName(String name);
+    ConsistentMapBuilder<K, V> withName(String name);
 
     /**
      * Sets a serializer that can be used to serialize
@@ -35,7 +35,7 @@
      * @param serializer serializer
      * @return this ConsistentMapBuilder
      */
-    public ConsistentMapBuilder<K, V> withSerializer(Serializer serializer);
+    ConsistentMapBuilder<K, V> withSerializer(Serializer serializer);
 
     /**
      * Disables distribution of map entries across multiple database partitions.
@@ -53,7 +53,7 @@
      * </p>
      * @return this ConsistentMapBuilder
      */
-    public ConsistentMapBuilder<K, V> withPartitionsDisabled();
+    ConsistentMapBuilder<K, V> withPartitionsDisabled();
 
     /**
      * Disables map updates.
@@ -62,7 +62,7 @@
      *
      * @return this ConsistentMapBuilder
      */
-    public ConsistentMapBuilder<K, V> withUpdatesDisabled();
+    ConsistentMapBuilder<K, V> withUpdatesDisabled();
 
     /**
      * Builds an consistent map based on the configuration options
@@ -71,7 +71,7 @@
      * @return new consistent map
      * @throws java.lang.RuntimeException if a mandatory parameter is missing
      */
-    public ConsistentMap<K, V> build();
+    ConsistentMap<K, V> build();
 
     /**
      * Builds an async consistent map based on the configuration options
@@ -80,5 +80,5 @@
      * @return new async consistent map
      * @throws java.lang.RuntimeException if a mandatory parameter is missing
      */
-    public AsyncConsistentMap<K, V> buildAsyncMap();
-}
\ No newline at end of file
+    AsyncConsistentMap<K, V> buildAsyncMap();
+}
diff --git a/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMap.java b/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMap.java
index 58a81cc..84b515c 100644
--- a/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMap.java
+++ b/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMap.java
@@ -45,14 +45,14 @@
      *
      * @return number of key-value mappings
      */
-    public int size();
+    int size();
 
     /**
      * Returns true if this map is empty.
      *
      * @return true if this map is empty, otherwise false
      */
-    public boolean isEmpty();
+    boolean isEmpty();
 
     /**
      * Returns true if the map contains a mapping for the specified key.
@@ -60,7 +60,7 @@
      * @param key the key to check if this map contains
      * @return true if this map has a mapping for the key, otherwise false
      */
-    public boolean containsKey(K key);
+    boolean containsKey(K key);
 
     /**
      * Returns true if the map contains a mapping from any key to the specified
@@ -69,7 +69,7 @@
      * @param value the value to check if this map has a mapping for
      * @return true if this map has a mapping to this value, otherwise false
      */
-    public boolean containsValue(V value);
+    boolean containsValue(V value);
 
     /**
      * Returns the value mapped to the specified key.
@@ -77,7 +77,7 @@
      * @param key the key to look up in this map
      * @return the value mapped to the key, or null if no mapping is found
      */
-    public V get(K key);
+    V get(K key);
 
     /**
      * Associates the specified value to the specified key in this map.
@@ -94,7 +94,7 @@
      * @param key the key to add a mapping for in this map
      * @param value the value to associate with the key in this map
      */
-    public void put(K key, V value);
+    void put(K key, V value);
 
     /**
      * Removes the mapping associated with the specified key from the map.
@@ -108,7 +108,7 @@
      *
      * @param key the key to remove the mapping for
      */
-    public void remove(K key);
+    void remove(K key);
 
     /**
      * Removes the given key-value mapping from the map, if it exists.
@@ -129,7 +129,7 @@
      * @param key the key to remove the mapping for
      * @param value the value mapped to the key
      */
-    public void remove(K key, V value);
+    void remove(K key, V value);
 
     /**
      * Adds mappings for all key-value pairs in the specified map to this map.
@@ -140,12 +140,12 @@
      *
      * @param m a map of values to add to this map
      */
-    public void putAll(Map<? extends K, ? extends V> m);
+    void putAll(Map<? extends K, ? extends V> m);
 
     /**
      * Removes all mappings from this map.
      */
-    public void clear();
+    void clear();
 
     /**
      * Returns a set of the keys in this map. Changes to the set are not
@@ -153,7 +153,7 @@
      *
      * @return set of keys in the map
      */
-    public Set<K> keySet();
+    Set<K> keySet();
 
     /**
      * Returns a collections of values in this map. Changes to the collection
@@ -161,7 +161,7 @@
      *
      * @return collection of values in the map
      */
-    public Collection<V> values();
+    Collection<V> values();
 
     /**
      * Returns a set of mappings contained in this map. Changes to the set are
@@ -169,7 +169,7 @@
      *
      * @return set of key-value mappings in this map
      */
-    public Set<Map.Entry<K, V>> entrySet();
+    Set<Map.Entry<K, V>> entrySet();
 
     /**
      * Adds the specified listener to the map which will be notified whenever
@@ -177,7 +177,7 @@
      *
      * @param listener listener to register for events
      */
-    public void addListener(EventuallyConsistentMapListener<K, V> listener);
+    void addListener(EventuallyConsistentMapListener<K, V> listener);
 
     /**
      * Removes the specified listener from the map such that it will no longer
@@ -185,7 +185,7 @@
      *
      * @param listener listener to deregister for events
      */
-    public void removeListener(EventuallyConsistentMapListener<K, V> listener);
+    void removeListener(EventuallyConsistentMapListener<K, V> listener);
 
     /**
      * Shuts down the map and breaks communication between different instances.
@@ -193,5 +193,5 @@
      * Calls to any methods on the map subsequent to calling destroy() will
      * throw a {@link java.lang.RuntimeException}.
      */
-    public void destroy();
+    void destroy();
 }
diff --git a/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMapBuilder.java b/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMapBuilder.java
index 75ac27d..c3abb4e 100644
--- a/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMapBuilder.java
+++ b/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMapBuilder.java
@@ -48,7 +48,7 @@
      * @param name name of the map
      * @return this EventuallyConsistentMapBuilder
      */
-    public EventuallyConsistentMapBuilder<K, V> withName(String name);
+    EventuallyConsistentMapBuilder<K, V> withName(String name);
 
     /**
      * Sets a serializer builder that can be used to create a serializer that
@@ -62,7 +62,7 @@
      * @param serializerBuilder serializer builder
      * @return this EventuallyConsistentMapBuilder
      */
-    public EventuallyConsistentMapBuilder<K, V> withSerializer(
+    EventuallyConsistentMapBuilder<K, V> withSerializer(
             KryoNamespace.Builder serializerBuilder);
 
     /**
@@ -83,7 +83,7 @@
      * @param clockService clock service
      * @return this EventuallyConsistentMapBuilder
      */
-    public EventuallyConsistentMapBuilder<K, V> withClockService(
+    EventuallyConsistentMapBuilder<K, V> withClockService(
             ClockService<K, V> clockService);
 
     /**
@@ -92,7 +92,7 @@
      * @param executor event executor
      * @return this EventuallyConsistentMapBuilder
      */
-    public EventuallyConsistentMapBuilder<K, V> withEventExecutor(
+    EventuallyConsistentMapBuilder<K, V> withEventExecutor(
             ExecutorService executor);
 
     /**
@@ -101,7 +101,7 @@
      * @param executor event executor
      * @return this EventuallyConsistentMapBuilder
      */
-    public EventuallyConsistentMapBuilder<K, V> withCommunicationExecutor(
+    EventuallyConsistentMapBuilder<K, V> withCommunicationExecutor(
             ExecutorService executor);
 
     /**
@@ -110,7 +110,7 @@
      * @param executor event executor
      * @return this EventuallyConsistentMapBuilder
      */
-    public EventuallyConsistentMapBuilder<K, V> withBackgroundExecutor(
+    EventuallyConsistentMapBuilder<K, V> withBackgroundExecutor(
             ScheduledExecutorService executor);
 
     /**
@@ -124,7 +124,7 @@
      *                           to
      * @return this EventuallyConsistentMapBuilder
      */
-    public EventuallyConsistentMapBuilder<K, V> withPeerUpdateFunction(
+    EventuallyConsistentMapBuilder<K, V> withPeerUpdateFunction(
             BiFunction<K, V, Collection<NodeId>> peerUpdateFunction);
 
     /**
@@ -137,7 +137,7 @@
      *
      * @return this EventuallyConsistentMapBuilder
      */
-    public EventuallyConsistentMapBuilder<K, V> withTombstonesDisabled();
+    EventuallyConsistentMapBuilder<K, V> withTombstonesDisabled();
 
     /**
      * Configures how often to run the anti-entropy background task.
@@ -149,7 +149,7 @@
      * @param unit time unit for the period
      * @return this EventuallyConsistentMapBuilder
      */
-    public EventuallyConsistentMapBuilder<K, V> withAntiEntropyPeriod(
+    EventuallyConsistentMapBuilder<K, V> withAntiEntropyPeriod(
             long period, TimeUnit unit);
 
     /**
@@ -163,7 +163,7 @@
      *
      * @return this EventuallyConsistentMapBuilder
      */
-    public EventuallyConsistentMapBuilder<K, V> withFasterConvergence();
+    EventuallyConsistentMapBuilder<K, V> withFasterConvergence();
 
     /**
      * Configure the map to persist data to disk.
@@ -173,7 +173,7 @@
      *
      * @return this EventuallyConsistentMapBuilder
      */
-    public EventuallyConsistentMapBuilder<K, V> withPersistence();
+    EventuallyConsistentMapBuilder<K, V> withPersistence();
 
     /**
      * Builds an eventually consistent map based on the configuration options
@@ -182,5 +182,5 @@
      * @return new eventually consistent map
      * @throws java.lang.RuntimeException if a mandatory parameter is missing
      */
-    public EventuallyConsistentMap<K, V> build();
+    EventuallyConsistentMap<K, V> build();
 }
diff --git a/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMapListener.java b/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMapListener.java
index 686255e..1f6a5e0 100644
--- a/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMapListener.java
+++ b/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMapListener.java
@@ -26,5 +26,5 @@
      *
      * @param event the event
      */
-    public void event(EventuallyConsistentMapEvent<K, V> event);
+    void event(EventuallyConsistentMapEvent<K, V> event);
 }
diff --git a/core/api/src/main/java/org/onosproject/store/service/Serializer.java b/core/api/src/main/java/org/onosproject/store/service/Serializer.java
index 32ae585..5e1b84e 100644
--- a/core/api/src/main/java/org/onosproject/store/service/Serializer.java
+++ b/core/api/src/main/java/org/onosproject/store/service/Serializer.java
@@ -44,7 +44,7 @@
      * @param kryo kryo namespace
      * @return Serializer instance
      */
-    public static Serializer using(KryoNamespace kryo) {
+    static Serializer using(KryoNamespace kryo) {
         return new Serializer() {
             @Override
             public <T> byte[] encode(T object) {
@@ -57,4 +57,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/core/api/src/main/java/org/onosproject/store/service/SetBuilder.java b/core/api/src/main/java/org/onosproject/store/service/SetBuilder.java
index 3ea7aaf..3f28065f 100644
--- a/core/api/src/main/java/org/onosproject/store/service/SetBuilder.java
+++ b/core/api/src/main/java/org/onosproject/store/service/SetBuilder.java
@@ -36,7 +36,7 @@
      * @param name name of the set
      * @return this SetBuilder
      */
-    public SetBuilder<E> withName(String name);
+    SetBuilder<E> withName(String name);
 
     /**
      * Sets a serializer that can be used to serialize
@@ -50,7 +50,7 @@
      * @param serializer serializer
      * @return this SetBuilder
      */
-    public SetBuilder<E> withSerializer(Serializer serializer);
+    SetBuilder<E> withSerializer(Serializer serializer);
 
     /**
      * Disables set updates.
@@ -68,5 +68,5 @@
      * @return new set
      * @throws java.lang.RuntimeException if a mandatory parameter is missing
      */
-    public Set<E> build();
-}
\ No newline at end of file
+    Set<E> build();
+}
diff --git a/core/api/src/main/java/org/onosproject/store/service/Transaction.java b/core/api/src/main/java/org/onosproject/store/service/Transaction.java
index 514e1ab..330d846 100644
--- a/core/api/src/main/java/org/onosproject/store/service/Transaction.java
+++ b/core/api/src/main/java/org/onosproject/store/service/Transaction.java
@@ -22,7 +22,7 @@
  */
 public interface Transaction {
 
-    public enum State {
+    enum State {
         /**
          * Indicates a new transaction that is about to be prepared. All transactions
          * start their life in this state.
@@ -81,7 +81,7 @@
      *
      * @return true is yes, false otherwise
      */
-    public default boolean isDone() {
+    default boolean isDone() {
         return state() == State.COMMITTED || state() == State.ROLLEDBACK;
     }
 
@@ -98,5 +98,5 @@
      *
      * @return last update time
      */
-    public long lastUpdated();
-}
\ No newline at end of file
+    long lastUpdated();
+}
diff --git a/core/api/src/main/java/org/onosproject/store/service/TransactionContextBuilder.java b/core/api/src/main/java/org/onosproject/store/service/TransactionContextBuilder.java
index 4ae6b0f..268c909 100644
--- a/core/api/src/main/java/org/onosproject/store/service/TransactionContextBuilder.java
+++ b/core/api/src/main/java/org/onosproject/store/service/TransactionContextBuilder.java
@@ -19,7 +19,7 @@
      *
      * @return this TransactionalContextBuilder
      */
-    public TransactionContextBuilder withPartitionsDisabled();
+    TransactionContextBuilder withPartitionsDisabled();
 
     /**
      * Builds a TransactionContext based on configuration options supplied to this
@@ -28,5 +28,5 @@
      * @return a new TransactionalContext
      * @throws java.lang.RuntimeException if a mandatory parameter is missing
      */
-    public TransactionContext build();
+    TransactionContext build();
 }
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/ObjectiveTrackerService.java b/core/net/src/main/java/org/onosproject/net/intent/impl/ObjectiveTrackerService.java
index 89ef2c1..667803c 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/ObjectiveTrackerService.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/ObjectiveTrackerService.java
@@ -47,7 +47,7 @@
      * @param resources resources to track
      */
     // TODO consider using the IntentData here rather than just the key
-    public void addTrackedResources(Key intentKey,
+    void addTrackedResources(Key intentKey,
                                     Collection<NetworkResource> resources);
 
     /**
@@ -56,7 +56,7 @@
      * @param intentKey  intent identity on whose behalf the path is being tracked
      * @param resources resources to stop tracking
      */
-    public void removeTrackedResources(Key intentKey,
+    void removeTrackedResources(Key intentKey,
                                        Collection<NetworkResource> resources);
 
 }
diff --git a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DatabaseState.java b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DatabaseState.java
index 90760f4..83909d8 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DatabaseState.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DatabaseState.java
@@ -41,7 +41,7 @@
    * @param context The map state context.
    */
   @Initializer
-  public void init(StateContext<DatabaseState<K, V>> context);
+  void init(StateContext<DatabaseState<K, V>> context);
 
   @Query
   Set<String> tableNames();
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/StoreSerializer.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/StoreSerializer.java
index 1d4dd03..f0149fc 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/StoreSerializer.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/StoreSerializer.java
@@ -31,7 +31,7 @@
      * @param obj object to be serialized
      * @return serialized bytes
      */
-    public byte[] encode(final Object obj);
+    byte[] encode(final Object obj);
 
     /**
      * Serializes the specified object into bytes.
@@ -39,7 +39,7 @@
      * @param obj object to be serialized
      * @param buffer to write serialized bytes
      */
-    public void encode(final Object obj, ByteBuffer buffer);
+    void encode(final Object obj, ByteBuffer buffer);
 
     /**
      * Serializes the specified object into bytes.
@@ -47,7 +47,7 @@
      * @param obj object to be serialized
      * @param stream to write serialized bytes
      */
-    public void encode(final Object obj, final OutputStream stream);
+    void encode(final Object obj, final OutputStream stream);
 
     /**
      * Deserializes the specified bytes into an object.
@@ -56,7 +56,7 @@
      * @return deserialized object
      * @param <T> decoded type
      */
-    public <T> T decode(final byte[] bytes);
+    <T> T decode(final byte[] bytes);
 
     /**
      * Deserializes the specified bytes into an object.
@@ -65,7 +65,7 @@
      * @return deserialized object
      * @param <T> decoded type
      */
-    public <T> T decode(final ByteBuffer buffer);
+    <T> T decode(final ByteBuffer buffer);
 
     /**
      * Deserializes the specified bytes into an object.
@@ -74,5 +74,5 @@
      * @return deserialized object
      * @param <T> decoded type
      */
-    public <T> T decode(final InputStream stream);
+    <T> T decode(final InputStream stream);
 }
diff --git a/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowAgent.java b/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowAgent.java
index 23924a7..ad6dede 100644
--- a/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowAgent.java
+++ b/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowAgent.java
@@ -34,14 +34,14 @@
      * @param sw the actual switch object.
      * @return true if added, false otherwise.
      */
-    public boolean addConnectedSwitch(Dpid dpid, OpenFlowSwitch sw);
+    boolean addConnectedSwitch(Dpid dpid, OpenFlowSwitch sw);
 
     /**
      * Checks if the activation for this switch is valid.
      * @param dpid the dpid to check
      * @return true if valid, false otherwise
      */
-    public boolean validActivation(Dpid dpid);
+    boolean validActivation(Dpid dpid);
 
     /**
      * Called when a switch is activated, with this controller's role as MASTER.
@@ -49,7 +49,7 @@
      * @param sw the actual switch
      * @return true if added, false otherwise.
      */
-    public boolean addActivatedMasterSwitch(Dpid dpid, OpenFlowSwitch sw);
+    boolean addActivatedMasterSwitch(Dpid dpid, OpenFlowSwitch sw);
 
     /**
      * Called when a switch is activated, with this controller's role as EQUAL.
@@ -57,7 +57,7 @@
      * @param sw the actual switch
      * @return true if added, false otherwise.
      */
-    public boolean addActivatedEqualSwitch(Dpid dpid, OpenFlowSwitch sw);
+    boolean addActivatedEqualSwitch(Dpid dpid, OpenFlowSwitch sw);
 
     /**
      * Called when this controller's role for a switch transitions from equal
@@ -65,7 +65,7 @@
      * 'equal' - so this transition is equivalent to 'addActivatedMasterSwitch'.
      * @param dpid the dpid to transistion.
      */
-    public void transitionToMasterSwitch(Dpid dpid);
+    void transitionToMasterSwitch(Dpid dpid);
 
     /**
      * Called when this controller's role for a switch transitions to equal.
@@ -73,7 +73,7 @@
      * 'equal'.
      * @param dpid the dpid to transistion.
      */
-    public void transitionToEqualSwitch(Dpid dpid);
+    void transitionToEqualSwitch(Dpid dpid);
 
     /**
      * Clear all state in controller switch maps for a switch that has
@@ -81,7 +81,7 @@
      * that switch from the global repository. Notify switch listeners.
      * @param dpid the dpid to remove.
      */
-    public void removeConnectedSwitch(Dpid dpid);
+    void removeConnectedSwitch(Dpid dpid);
 
     /**
      * Process a message coming from a switch.
@@ -89,7 +89,7 @@
      * @param dpid the dpid the message came on.
      * @param m the message to process
      */
-    public void processMessage(Dpid dpid, OFMessage m);
+    void processMessage(Dpid dpid, OFMessage m);
 
     /**
      * Notifies the controller that role assertion has failed.
@@ -98,5 +98,5 @@
      * @param requested the role controller requested
      * @param response role reply from the switch
      */
-    public void returnRoleReply(Dpid dpid, RoleState requested, RoleState response);
+    void returnRoleReply(Dpid dpid, RoleState requested, RoleState response);
 }
diff --git a/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowSwitchDriver.java b/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowSwitchDriver.java
index ae3f8db..b259388 100644
--- a/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowSwitchDriver.java
+++ b/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowSwitchDriver.java
@@ -40,28 +40,28 @@
      * can only be called once.
      * @param agent the agent to set.
      */
-    public void setAgent(OpenFlowAgent agent);
+    void setAgent(OpenFlowAgent agent);
 
     /**
      * Sets the Role handler object.
      * This method can only be called once.
      * @param roleHandler the roleHandler class
      */
-    public void setRoleHandler(RoleHandler roleHandler);
+    void setRoleHandler(RoleHandler roleHandler);
 
     /**
      * Reasserts this controllers role to the switch.
      * Useful in cases where the switch no longer agrees
      * that this controller has the role it claims.
      */
-    public void reassertRole();
+    void reassertRole();
 
     /**
      * Handle the situation where the role request triggers an error.
      * @param error the error to handle.
      * @return true if handled, false if not.
      */
-    public boolean handleRoleError(OFErrorMsg error);
+    boolean handleRoleError(OFErrorMsg error);
 
     /**
      * If this driver know of Nicira style role messages, these should
@@ -70,7 +70,7 @@
      * @throws SwitchStateException if the message received was
      *  not a nicira role or was malformed.
      */
-    public void handleNiciraRole(OFMessage m) throws SwitchStateException;
+    void handleNiciraRole(OFMessage m) throws SwitchStateException;
 
     /**
      * Handle OF 1.x (where x &gt; 0) role messages.
@@ -78,98 +78,98 @@
      * @throws SwitchStateException if the message received was
      *  not a nicira role or was malformed.
      */
-    public void handleRole(OFMessage m) throws SwitchStateException;
+    void handleRole(OFMessage m) throws SwitchStateException;
 
     /**
      * Announce to the OpenFlow agent that this switch has connected.
      * @return true if successful, false if duplicate switch.
      */
-    public boolean connectSwitch();
+    boolean connectSwitch();
 
     /**
      * Activate this MASTER switch-controller relationship in the OF agent.
      * @return true is successful, false is switch has not
      * connected or is unknown to the system.
      */
-    public boolean activateMasterSwitch();
+    boolean activateMasterSwitch();
 
     /**
      * Activate this EQUAL switch-controller relationship in the OF agent.
      * @return true is successful, false is switch has not
      * connected or is unknown to the system.
      */
-    public boolean activateEqualSwitch();
+    boolean activateEqualSwitch();
 
     /**
      * Transition this switch-controller relationship to an EQUAL state.
      */
-    public void transitionToEqualSwitch();
+    void transitionToEqualSwitch();
 
     /**
      * Transition this switch-controller relationship to an Master state.
      */
-    public void transitionToMasterSwitch();
+    void transitionToMasterSwitch();
 
     /**
      * Remove this switch from the openflow agent.
      */
-    public void removeConnectedSwitch();
+    void removeConnectedSwitch();
 
     /**
      * Sets the ports on this switch.
      * @param portDescReply the port set and descriptions
      */
-    public void setPortDescReply(OFPortDescStatsReply portDescReply);
+    void setPortDescReply(OFPortDescStatsReply portDescReply);
 
     /**
      * Sets the ports on this switch.
      * @param portDescReplies list of port set and descriptions
      */
-    public void setPortDescReplies(List<OFPortDescStatsReply> portDescReplies);
+    void setPortDescReplies(List<OFPortDescStatsReply> portDescReplies);
 
     /**
      * Sets the features reply for this switch.
      * @param featuresReply the features to set.
      */
-    public void setFeaturesReply(OFFeaturesReply featuresReply);
+    void setFeaturesReply(OFFeaturesReply featuresReply);
 
     /**
      * Sets the switch description.
      * @param desc the descriptions
      */
-    public void setSwitchDescription(OFDescStatsReply desc);
+    void setSwitchDescription(OFDescStatsReply desc);
 
     /**
      * Gets the next transaction id to use.
      * @return the xid
      */
-    public int getNextTransactionId();
+    int getNextTransactionId();
 
 
     /**
      * Sets the OF version for this switch.
      * @param ofV the version to set.
      */
-    public void setOFVersion(OFVersion ofV);
+    void setOFVersion(OFVersion ofV);
 
     /**
      * Sets this switch has having a full flowtable.
      * @param full true if full, false otherswise.
      */
-    public void setTableFull(boolean full);
+    void setTableFull(boolean full);
 
     /**
      * Sets the associated Netty channel for this switch.
      * @param channel the Netty channel
      */
-    public void setChannel(Channel channel);
+    void setChannel(Channel channel);
 
     /**
      * Sets whether the switch is connected.
      *
      * @param connected whether the switch is connected
      */
-    public void setConnected(boolean connected);
+    void setConnected(boolean connected);
 
     /**
      * Initialises the behaviour.
diff --git a/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowSwitchDriverFactory.java b/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowSwitchDriverFactory.java
index 98030fe..a0d8f18 100644
--- a/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowSwitchDriverFactory.java
+++ b/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowSwitchDriverFactory.java
@@ -34,6 +34,6 @@
      * @param ofv the OF version in use
      * @return the openflow switch representation.
      */
-    public OpenFlowSwitchDriver getOFSwitchImpl(Dpid dpid,
+    OpenFlowSwitchDriver getOFSwitchImpl(Dpid dpid,
             OFDescStatsReply desc, OFVersion ofv);
 }
diff --git a/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/RoleHandler.java b/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/RoleHandler.java
index d930aaa..b406888 100644
--- a/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/RoleHandler.java
+++ b/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/RoleHandler.java
@@ -40,7 +40,7 @@
      * @throws SwitchStateException If the message is a Nicira role reply
      * but the numeric role value is unknown.
      */
-    public RoleState extractNiciraRoleReply(OFExperimenter experimenterMsg)
+    RoleState extractNiciraRoleReply(OFExperimenter experimenterMsg)
             throws SwitchStateException;
 
     /**
@@ -64,7 +64,7 @@
      * @return false if and only if the switch does not support role-request
      * messages, according to the switch driver; true otherwise.
      */
-    public boolean sendRoleRequest(RoleState role, RoleRecvStatus exp)
+    boolean sendRoleRequest(RoleState role, RoleRecvStatus exp)
             throws IOException;
 
     /**
@@ -73,7 +73,7 @@
      * @return RoleReplyInfo object
      * @throws SwitchStateException If unknown role encountered
      */
-    public RoleReplyInfo extractOFRoleReply(OFRoleReply rrmsg)
+    RoleReplyInfo extractOFRoleReply(OFRoleReply rrmsg)
             throws SwitchStateException;
 
     /**
@@ -93,7 +93,7 @@
      * @return result comparing expected and received reply
      * @throws SwitchStateException if no request is pending
      */
-    public RoleRecvStatus deliverRoleReply(RoleReplyInfo rri)
+    RoleRecvStatus deliverRoleReply(RoleReplyInfo rri)
             throws SwitchStateException;
 
 
@@ -108,7 +108,7 @@
      * @return result comparing expected and received reply
      * @throws SwitchStateException if switch did not support requested role
      */
-    public RoleRecvStatus deliverError(OFErrorMsg error)
+    RoleRecvStatus deliverError(OFErrorMsg error)
             throws SwitchStateException;
 
 }
diff --git a/utils/misc/src/main/java/org/onlab/graph/GraphPathSearch.java b/utils/misc/src/main/java/org/onlab/graph/GraphPathSearch.java
index 72ef91c..caebce4 100644
--- a/utils/misc/src/main/java/org/onlab/graph/GraphPathSearch.java
+++ b/utils/misc/src/main/java/org/onlab/graph/GraphPathSearch.java
@@ -26,26 +26,26 @@
  */
 public interface GraphPathSearch<V extends Vertex, E extends Edge<V>> {
 
-    public static int ALL_PATHS = -1;
+    static int ALL_PATHS = -1;
 
     /**
      * Abstraction of a path search result.
      */
-    public interface Result<V extends Vertex, E extends Edge<V>> {
+    interface Result<V extends Vertex, E extends Edge<V>> {
 
         /**
          * Returns the search source.
          *
          * @return search source
          */
-        public V src();
+        V src();
 
         /**
          * Returns the search destination, if was was given.
          *
          * @return optional search destination
          */
-        public V dst();
+        V dst();
 
         /**
          * Returns the set of paths produced as a result of the graph search.
@@ -59,14 +59,14 @@
          *
          * @return map of vertex to its parent edge bindings
          */
-        public Map<V, Set<E>> parents();
+        Map<V, Set<E>> parents();
 
         /**
          * Return a bindings of each vertex to its cost in the path.
          *
          * @return map of vertex to path cost bindings
          */
-        public Map<V, Double> costs();
+        Map<V, Double> costs();
     }
 
     /**
diff --git a/utils/misc/src/main/java/org/onlab/graph/GraphSearch.java b/utils/misc/src/main/java/org/onlab/graph/GraphSearch.java
index b5eca37..ca369a7 100644
--- a/utils/misc/src/main/java/org/onlab/graph/GraphSearch.java
+++ b/utils/misc/src/main/java/org/onlab/graph/GraphSearch.java
@@ -26,7 +26,7 @@
     /**
      * Notion of a graph search result.
      */
-    public interface Result<V extends Vertex, E extends Edge<V>> {
+    interface Result<V extends Vertex, E extends Edge<V>> {
     }
 
     /**
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 6e2f2a0..ac6ae60 100644
--- a/utils/misc/src/main/java/org/onlab/packet/IPacket.java
+++ b/utils/misc/src/main/java/org/onlab/packet/IPacket.java
@@ -26,32 +26,32 @@
      *
      * @return the payload
      */
-    public IPacket getPayload();
+    IPacket getPayload();
 
     /**
      *
      * @param packet new payload
      * @return self
      */
-    public IPacket setPayload(IPacket packet);
+    IPacket setPayload(IPacket packet);
 
     /**
      *
      * @return parent packet
      */
-    public IPacket getParent();
+    IPacket getParent();
 
     /**
      *
      * @param packet new parent
      * @return self
      */
-    public IPacket setParent(IPacket packet);
+    IPacket setParent(IPacket packet);
 
     /**
      * Reset any checksums as needed, and call resetChecksum on all parents.
      */
-    public void resetChecksum();
+    void resetChecksum();
 
     /**
      * Sets all payloads parent packet if applicable, then serializes this
@@ -59,7 +59,7 @@
      *
      * @return a byte[] containing this packet and payloads
      */
-    public byte[] serialize();
+    byte[] serialize();
 
     /**
      * Deserializes this packet layer and all possible payloads.
@@ -71,12 +71,12 @@
      *            length of the data to deserialize
      * @return the deserialized data
      */
-    public IPacket deserialize(byte[] data, int offset, int length);
+    IPacket deserialize(byte[] data, int offset, int length);
 
     /**
      * Clone this packet and its payload packet but not its parent.
      *
      * @return the clone
      */
-    public Object clone();
+    Object clone();
 }
diff --git a/utils/misc/src/main/java/org/onlab/packet/ipv6/IExtensionHeader.java b/utils/misc/src/main/java/org/onlab/packet/ipv6/IExtensionHeader.java
index bbe5b7c..252f1a3 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ipv6/IExtensionHeader.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ipv6/IExtensionHeader.java
@@ -25,7 +25,7 @@
      *
      * @return next header
      */
-    public byte getNextHeader();
+    byte getNextHeader();
 
     /**
      * Sets the type of next header.
@@ -33,5 +33,5 @@
      * @param nextHeader the next header to set
      * @return this
      */
-    public IExtensionHeader setNextHeader(final byte nextHeader);
+    IExtensionHeader setNextHeader(final byte nextHeader);
 }
