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);
 }
