diff --git a/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/ctl/Bmv2PreControllerImpl.java b/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/ctl/Bmv2PreControllerImpl.java
index f9661f2..bc0aa47 100644
--- a/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/ctl/Bmv2PreControllerImpl.java
+++ b/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/ctl/Bmv2PreControllerImpl.java
@@ -50,7 +50,7 @@
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static java.lang.String.format;
-import static org.onosproject.drivers.bmv2.ctl.OsgiPropertyDefaults.*;
+import static org.onosproject.drivers.bmv2.ctl.OsgiPropertyConstants.*;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -58,9 +58,9 @@
  */
 @Component(immediate = true, service = Bmv2PreController.class,
         property = {
-                "numConnectionRetries:Integer=" + NUM_CONNECTION_RETRIES_DEFAULT,
-                "timeBetweenRetries:Integer=" + TIME_BETWEEN_RETRIES_DEFAULT,
-                "deviceLockWaitingTime:Integer=" + DEVICE_LOCK_WAITING_TIME_IN_SEC_DEFAULT,
+                 NUM_CONNECTION_RETRIES + ":Integer=" + NUM_CONNECTION_RETRIES_DEFAULT,
+                TIME_BETWEEN_RETRIES + ":Integer=" + TIME_BETWEEN_RETRIES_DEFAULT,
+                DEVICE_LOCK_WAITING_TIME_IN_SEC + ":Integer=" + DEVICE_LOCK_WAITING_TIME_IN_SEC_DEFAULT,
         })
 public class Bmv2PreControllerImpl implements Bmv2PreController {
 
@@ -79,14 +79,14 @@
             });
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected ComponentConfigService cfgService;
-    //@Property(name = "numConnectionRetries", intValue = DEFAULT_NUM_CONNECTION_RETRIES,
-    //        label = "Number of connection retries after a network error")
+
+    /** Number of connection retries after a network error. */
     private int numConnectionRetries = NUM_CONNECTION_RETRIES_DEFAULT;
-    //@Property(name = "timeBetweenRetries", intValue = DEFAULT_TIME_BETWEEN_RETRIES,
-    //        label = "Time between retries in milliseconds")
+
+    /** Time between retries in milliseconds. */
     private int timeBetweenRetries = TIME_BETWEEN_RETRIES_DEFAULT;
-    //@Property(name = "deviceLockWaitingTime", intValue = DEVICE_LOCK_WAITING_TIME_IN_SEC,
-    //        label = "Waiting time for a read/write lock in seconds")
+
+    /** Waiting time for a read/write lock in seconds. */
     private int deviceLockWaitingTime = DEVICE_LOCK_WAITING_TIME_IN_SEC_DEFAULT;
 
     @Activate
diff --git a/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/ctl/OsgiPropertyDefaults.java b/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/ctl/OsgiPropertyConstants.java
similarity index 68%
rename from drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/ctl/OsgiPropertyDefaults.java
rename to drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/ctl/OsgiPropertyConstants.java
index 3d63934..1fe6536 100644
--- a/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/ctl/OsgiPropertyDefaults.java
+++ b/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/ctl/OsgiPropertyConstants.java
@@ -19,11 +19,16 @@
 /**
  * Constants for default values of configurable properties.
  */
-public final class OsgiPropertyDefaults {
+public final class OsgiPropertyConstants {
 
-    private OsgiPropertyDefaults() {}
+    private OsgiPropertyConstants() {}
 
+    public static final String DEVICE_LOCK_WAITING_TIME_IN_SEC = "deviceLockWaitingTime";
     public static final int DEVICE_LOCK_WAITING_TIME_IN_SEC_DEFAULT = 60;
+
+    public static final String NUM_CONNECTION_RETRIES = "numConnectionRetries";
     public static final int NUM_CONNECTION_RETRIES_DEFAULT = 2;
-    public static final int TIME_BETWEEN_RETRIES_DEFAULT = 10;
+
+    public static final String TIME_BETWEEN_RETRIES = "timeBetweenRetries";
+    public static final int TIME_BETWEEN_RETRIES_DEFAULT = 2;
 }
diff --git a/incubator/protobuf/registry/src/main/java/org/onosproject/protobuf/registry/GrpcServiceRegistryImpl.java b/incubator/protobuf/registry/src/main/java/org/onosproject/protobuf/registry/GrpcServiceRegistryImpl.java
index 1e25b84..9935cdb 100644
--- a/incubator/protobuf/registry/src/main/java/org/onosproject/protobuf/registry/GrpcServiceRegistryImpl.java
+++ b/incubator/protobuf/registry/src/main/java/org/onosproject/protobuf/registry/GrpcServiceRegistryImpl.java
@@ -65,8 +65,7 @@
     clients of nonstandard port usage as there is no mechanism available to
     discover the port hosting gRPC services.
      */
-    @Property(name = PORT_PROPERTY_NAME, intValue = DEFAULT_SERVER_PORT,
-             label = "The port number which ONOS will use to host gRPC services.")
+    /** The port number which ONOS will use to host gRPC services. */
     private int listeningPort = DEFAULT_SERVER_PORT;
 
     @Activate
diff --git a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceServer.java b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceServer.java
index 1d506a2..2bf2081 100644
--- a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceServer.java
+++ b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceServer.java
@@ -99,9 +99,7 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected LinkProviderRegistry linkProviderRegistry;
 
-
-    @Property(name = "listenPort", intValue = DEFAULT_LISTEN_PORT,
-            label = "Port to listen on")
+    /** Port to listen on */
     protected int listenPort = DEFAULT_LISTEN_PORT;
 
     private Server server;
diff --git a/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualFlowRuleStore.java b/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualFlowRuleStore.java
index 27ca7f7..61ea506 100644
--- a/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualFlowRuleStore.java
+++ b/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualFlowRuleStore.java
@@ -94,7 +94,7 @@
 import static com.google.common.base.Strings.isNullOrEmpty;
 import static org.onlab.util.Tools.get;
 import static org.onlab.util.Tools.groupedThreads;
-import static org.onosproject.incubator.store.virtual.impl.OsgiPropertyDefaults.*;
+import static org.onosproject.incubator.store.virtual.impl.OsgiPropertyConstants.*;
 import static org.onosproject.net.flow.FlowRuleEvent.Type.RULE_REMOVED;
 import static org.slf4j.LoggerFactory.getLogger;
 
@@ -105,9 +105,9 @@
 //TODO: support backup and persistent mechanism
 @Component(immediate = true, enabled = false, service = VirtualNetworkFlowRuleStore.class,
         property = {
-                "messageHandlerThreadPoolSize:Integer=" + MESSAGE_HANDLER_THREAD_POOL_SIZE_DEFAULT,
-                "pendingFutureTimeoutMinutes:Integer=" + BACKUP_PERIOD_MILLIS_DEFAULT,
-                "persistenceEnabled:Boolean=" + PERSISTENCE_ENABLED_DEFAULT,
+                MESSAGE_HANDLER_THREAD_POOL_SIZE + ":Integer=" + MESSAGE_HANDLER_THREAD_POOL_SIZE_DEFAULT,
+                BACKUP_PERIOD_MILLIS + ":Integer=" + BACKUP_PERIOD_MILLIS_DEFAULT,
+                PERSISTENCE_ENABLED + ":Boolean=" + PERSISTENCE_ENABLED_DEFAULT,
         })
 
 public class DistributedVirtualFlowRuleStore
@@ -117,7 +117,6 @@
     private final Logger log = getLogger(getClass());
 
     //TODO: confirm this working fine with multiple thread more than 1
-    private static final int MESSAGE_HANDLER_THREAD_POOL_SIZE = 1;
     private static final long FLOW_RULE_STORE_TIMEOUT_MILLIS = 5000;
 
     private static final String FLOW_OP_TOPIC = "virtual-flow-ops-ids";
@@ -134,15 +133,13 @@
     private static final MessageSubject REMOTE_APPLY_COMPLETED
             = new MessageSubject("virtual-peer-apply-completed");
 
-    //@Property(name = "msgHandlerThreadPoolSize", intValue = MESSAGE_HANDLER_THREAD_POOL_SIZE,
-    //        label = "Number of threads in the message handler pool")
+    /** Number of threads in the message handler pool. */
     private int msgHandlerThreadPoolSize = MESSAGE_HANDLER_THREAD_POOL_SIZE_DEFAULT;
 
-    //@Property(name = "backupPeriod", intValue = BACKUP_PERIOD_MILLIS,
-    //        label = "Delay in ms between successive backup runs")
+    /** Delay in ms between successive backup runs. */
     private int backupPeriod = BACKUP_PERIOD_MILLIS_DEFAULT;
-    //@Property(name = "persistenceEnabled", boolValue = false,
-    //        label = "Indicates whether or not changes in the flow table should be persisted to disk.")
+
+    /** Indicates whether or not changes in the flow table should be persisted to disk.. */
     private boolean persistenceEnabled = PERSISTENCE_ENABLED_DEFAULT;
 
     private InternalFlowTable flowTable = new InternalFlowTable();
@@ -240,13 +237,13 @@
         int newPoolSize;
         int newBackupPeriod;
         try {
-            String s = get(properties, "msgHandlerPoolSize");
+            String s = get(properties, MESSAGE_HANDLER_THREAD_POOL_SIZE);
             newPoolSize = isNullOrEmpty(s) ? msgHandlerThreadPoolSize : Integer.parseInt(s.trim());
 
-            s = get(properties, "backupPeriod");
+            s = get(properties, BACKUP_PERIOD_MILLIS);
             newBackupPeriod = isNullOrEmpty(s) ? backupPeriod : Integer.parseInt(s.trim());
         } catch (NumberFormatException | ClassCastException e) {
-            newPoolSize = MESSAGE_HANDLER_THREAD_POOL_SIZE;
+            newPoolSize = MESSAGE_HANDLER_THREAD_POOL_SIZE_DEFAULT;
             newBackupPeriod = BACKUP_PERIOD_MILLIS_DEFAULT;
         }
 
diff --git a/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualPacketStore.java b/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualPacketStore.java
index c1a1210..cbf3860 100644
--- a/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualPacketStore.java
+++ b/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualPacketStore.java
@@ -63,7 +63,8 @@
 import static java.util.concurrent.Executors.newFixedThreadPool;
 import static org.onlab.util.Tools.get;
 import static org.onlab.util.Tools.groupedThreads;
-import static org.onosproject.incubator.store.virtual.impl.OsgiPropertyDefaults.MESSAGE_HANDLER_THREAD_POOL_SIZE_DEFAULT;
+import static org.onosproject.incubator.store.virtual.impl.OsgiPropertyConstants.MESSAGE_HANDLER_THREAD_POOL_SIZE;
+import static org.onosproject.incubator.store.virtual.impl.OsgiPropertyConstants.MESSAGE_HANDLER_THREAD_POOL_SIZE_DEFAULT;
 import static org.onosproject.net.packet.PacketEvent.Type.EMIT;
 import static org.slf4j.LoggerFactory.getLogger;
 
@@ -73,7 +74,7 @@
  */
 @Component(immediate = true, enabled = false, service = VirtualNetworkPacketStore.class,
         property = {
-                 "messageHandlerThreadPoolSize:Integer=" + MESSAGE_HANDLER_THREAD_POOL_SIZE_DEFAULT,
+                 MESSAGE_HANDLER_THREAD_POOL_SIZE + ":Integer=" + MESSAGE_HANDLER_THREAD_POOL_SIZE_DEFAULT,
         })
 public class DistributedVirtualPacketStore
         extends AbstractVirtualStore<PacketEvent, PacketStoreDelegate>
@@ -107,8 +108,7 @@
 
     private ExecutorService messageHandlingExecutor;
 
-    //@Property(name = "messageHandlerThreadPoolSize", intValue = DEFAULT_MESSAGE_HANDLER_THREAD_POOL_SIZE,
-    //        label = "Size of thread pool to assign message handler")
+    /** Size of thread pool to assign message handler. */
     private static int messageHandlerThreadPoolSize = MESSAGE_HANDLER_THREAD_POOL_SIZE_DEFAULT;
 
     @Activate
@@ -149,7 +149,7 @@
         int newMessageHandlerThreadPoolSize;
 
         try {
-            String s = get(properties, "messageHandlerThreadPoolSize");
+            String s = get(properties, MESSAGE_HANDLER_THREAD_POOL_SIZE);
 
             newMessageHandlerThreadPoolSize =
                     isNullOrEmpty(s) ? messageHandlerThreadPoolSize : Integer.parseInt(s.trim());
diff --git a/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/OsgiPropertyDefaults.java b/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/OsgiPropertyConstants.java
similarity index 70%
rename from incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/OsgiPropertyDefaults.java
rename to incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/OsgiPropertyConstants.java
index 765903a..4670429 100644
--- a/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/OsgiPropertyDefaults.java
+++ b/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/OsgiPropertyConstants.java
@@ -19,13 +19,20 @@
 /**
  * Constants for default values of configurable properties.
  */
-public final class OsgiPropertyDefaults {
+public final class OsgiPropertyConstants {
 
-    private OsgiPropertyDefaults() {}
+    private OsgiPropertyConstants() {}
 
+    public static final String MESSAGE_HANDLER_THREAD_POOL_SIZE = "messageHandlerThreadPoolSize";
     public static final int MESSAGE_HANDLER_THREAD_POOL_SIZE_DEFAULT = 4;
+
+    public static final String BACKUP_PERIOD_MILLIS = "backupPeriod";
     public static final int BACKUP_PERIOD_MILLIS_DEFAULT = 2000;
+
+    public static final String PERSISTENCE_ENABLED = "persistenceEnabled";
     public static final boolean PERSISTENCE_ENABLED_DEFAULT = false;
+
+    public static final String PENDING_FUTURE_TIMEOUT_MINUTES = "pendingFutureTimeoutMinutes";
     public static final int PENDING_FUTURE_TIMEOUT_MINUTES_DEFAULT = 5;
 
 }
diff --git a/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/SimpleVirtualFlowRuleStore.java b/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/SimpleVirtualFlowRuleStore.java
index c2edd81..ab2c792 100644
--- a/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/SimpleVirtualFlowRuleStore.java
+++ b/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/SimpleVirtualFlowRuleStore.java
@@ -62,7 +62,8 @@
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import static org.onosproject.incubator.store.virtual.impl.OsgiPropertyDefaults.PENDING_FUTURE_TIMEOUT_MINUTES_DEFAULT;
+import static org.onosproject.incubator.store.virtual.impl.OsgiPropertyConstants.PENDING_FUTURE_TIMEOUT_MINUTES;
+import static org.onosproject.incubator.store.virtual.impl.OsgiPropertyConstants.PENDING_FUTURE_TIMEOUT_MINUTES_DEFAULT;
 import static org.onosproject.net.flow.FlowRuleEvent.Type.RULE_REMOVED;
 import static org.slf4j.LoggerFactory.getLogger;
 
@@ -74,7 +75,7 @@
 
 @Component(immediate = true, service = VirtualNetworkFlowRuleStore.class,
         property = {
-                 "pendingFutureTimeoutMinutes:Integer=" + PENDING_FUTURE_TIMEOUT_MINUTES_DEFAULT,
+                 PENDING_FUTURE_TIMEOUT_MINUTES + ":Integer=" + PENDING_FUTURE_TIMEOUT_MINUTES_DEFAULT,
         })
 public class SimpleVirtualFlowRuleStore
         extends AbstractVirtualStore<FlowRuleBatchEvent, FlowRuleStoreDelegate>
@@ -92,8 +93,7 @@
 
     private final AtomicInteger localBatchIdGen = new AtomicInteger();
 
-    //@Property(name = "pendingFutureTimeoutMinutes", intValue = DEFAULT_PENDING_FUTURE_TIMEOUT_MINUTES,
-    //        label = "Expiration time after an entry is created that it should be automatically removed")
+    /** Expiration time after an entry is created that it should be automatically removed. */
     private int pendingFutureTimeoutMinutes = PENDING_FUTURE_TIMEOUT_MINUTES_DEFAULT;
 
     private Cache<Integer, SettableFuture<CompletedBatchOperation>> pendingFutures =
diff --git a/protocols/grpc/ctl/src/main/java/org/onosproject/grpc/ctl/GrpcControllerImpl.java b/protocols/grpc/ctl/src/main/java/org/onosproject/grpc/ctl/GrpcControllerImpl.java
index 232885c..7d038ce 100644
--- a/protocols/grpc/ctl/src/main/java/org/onosproject/grpc/ctl/GrpcControllerImpl.java
+++ b/protocols/grpc/ctl/src/main/java/org/onosproject/grpc/ctl/GrpcControllerImpl.java
@@ -60,11 +60,16 @@
 import java.util.concurrent.locks.Lock;
 
 import static com.google.common.base.Preconditions.checkNotNull;
+import static org.onosproject.grpc.ctl.OsgiPropertyConstants.ENABLE_MESSAGE_LOG;
+import static org.onosproject.grpc.ctl.OsgiPropertyConstants.ENABLE_MESSAGE_LOG_DEFAULT;
 
 /**
  * Default implementation of the GrpcController.
  */
-@Component(immediate = true, service = GrpcController.class)
+@Component(immediate = true, service = GrpcController.class,
+        property = {
+            ENABLE_MESSAGE_LOG + ":Boolean=" + ENABLE_MESSAGE_LOG_DEFAULT,
+        })
 public class GrpcControllerImpl implements GrpcController {
 
     private  static final String SET_FORWARDING_PIPELINE_CONFIG_METHOD = "p4.P4Runtime/SetForwardingPipelineConfig";
@@ -75,8 +80,8 @@
     // Hint: set to true to log all gRPC messages received/sent on all channels
     // Does not enable log on existing channels
     private static final boolean DEFAULT_LOG_LEVEL = false;
-    //@Property(name = "enableMessageLog", boolValue =  DEFAULT_LOG_LEVEL,
-    //        label = "Indicates whether to log all gRPC messages sent and received on all channels")
+
+    /** Indicates whether to log all gRPC messages sent and received on all channels. */
     public static boolean enableMessageLog = DEFAULT_LOG_LEVEL;
 
     private final Logger log = LoggerFactory.getLogger(getClass());
@@ -95,7 +100,7 @@
     public void modified(ComponentContext context) {
         if (context != null) {
             Dictionary<?, ?> properties = context.getProperties();
-            enableMessageLog = Tools.isPropertyEnabled(properties, "enableMessageLog",
+            enableMessageLog = Tools.isPropertyEnabled(properties, ENABLE_MESSAGE_LOG,
                     DEFAULT_LOG_LEVEL);
             log.info("Configured. Log of gRPC messages is {}", enableMessageLog ? "enabled" : "disabled");
         }
diff --git a/providers/link/src/main/java/org/onosproject/provider/linkdiscovery/impl/OsgiPropertyDefaults.java b/protocols/grpc/ctl/src/main/java/org/onosproject/grpc/ctl/OsgiPropertyConstants.java
similarity index 72%
copy from providers/link/src/main/java/org/onosproject/provider/linkdiscovery/impl/OsgiPropertyDefaults.java
copy to protocols/grpc/ctl/src/main/java/org/onosproject/grpc/ctl/OsgiPropertyConstants.java
index ba85b86..576d1da 100644
--- a/providers/link/src/main/java/org/onosproject/provider/linkdiscovery/impl/OsgiPropertyDefaults.java
+++ b/protocols/grpc/ctl/src/main/java/org/onosproject/grpc/ctl/OsgiPropertyConstants.java
@@ -14,16 +14,16 @@
  * limitations under the License.
  */
 
-package org.onosproject.provider.linkdiscovery.impl;
+package org.onosproject.grpc.ctl;
 
 /**
  * Constants for default values of configurable properties.
  */
-public final class OsgiPropertyDefaults {
+public final class OsgiPropertyConstants {
 
-    private OsgiPropertyDefaults() {}
+    private OsgiPropertyConstants() {}
 
-    public static final int POLL_DELAY_SECONDS_DEFAULT = 20;
-    public static final int POLL_FREQUENCY_SECONDS_DEFAULT = 10;
+    public static final String ENABLE_MESSAGE_LOG = "enableMessageLog";
+    public static final boolean ENABLE_MESSAGE_LOG_DEFAULT = false;
 
 }
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/LispControllerImpl.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/LispControllerImpl.java
index 779e6c2..9fd5200 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/LispControllerImpl.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/LispControllerImpl.java
@@ -51,42 +51,45 @@
 import static org.onlab.util.Tools.get;
 import static org.onlab.util.Tools.getIntegerProperty;
 import static org.onlab.util.Tools.groupedThreads;
+import static org.onosproject.lisp.ctl.impl.OsgiPropertyConstants.*;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
  * LISP controller initiation class.
  */
-@Component(immediate = true, service = LispController.class)
+@Component(immediate = true, service = LispController.class,
+        property = {
+                LISP_AUTH_KEY + "=" + LISP_AUTH_KEY_DEFAULT,
+                LISP_AUTH_KEY_ID + ":Integer=" + LISP_AUTH_KEY_ID_DEFAULT,
+                ENABLE_SMR + ":Boolean=" + ENABLE_SMR_DEFAULT,
+        })
 public class LispControllerImpl implements LispController {
 
     private static final String APP_ID = "org.onosproject.lisp-base";
 
     private static final Logger log = getLogger(LispControllerImpl.class);
 
-    private static final String DEFAULT_LISP_AUTH_KEY = "onos";
-    private static final short DEFAULT_LISP_AUTH_KEY_ID = 1;
-
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected CoreService coreService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected ComponentConfigService cfgService;
 
-    //@Property(name = "lispAuthKey", value = DEFAULT_LISP_AUTH_KEY,
-    //        label = "Authentication key which is used to calculate authentication " +
-    //                "data for LISP control message; default value is onos")
-    private String lispAuthKey = DEFAULT_LISP_AUTH_KEY;
+    /**
+     * Authentication key which is used to calculate authentication data for
+     * LISP control message; default value is onos.
+     */
+    private String lispAuthKey = LISP_AUTH_KEY_DEFAULT;
 
-    //@Property(name = "lispAuthKeyId", intValue = DEFAULT_LISP_AUTH_KEY_ID,
-    //        label = "Authentication key id which denotes the authentication method " +
-    //                "that ONOS uses to calculate the authentication data; " +
-    //                "1 denotes HMAC SHA1 encryption, 2 denotes HMAC SHA256 encryption; " +
-    //                "default value is 1")
-    private int lispAuthKeyId = DEFAULT_LISP_AUTH_KEY_ID;
+    /**
+     * Authentication key id which denotes the authentication method
+     * that ONOS uses to calculate the authentication data;
+     * 1 denotes HMAC SHA1 encryption, 2 denotes HMAC SHA256 encryption;
+     * default value is 1.
+     */
+    private int lispAuthKeyId = LISP_AUTH_KEY_ID_DEFAULT;
 
-    //@Property(name = "enableSmr", boolValue = false,
-    //        label = "Enable to send SMR(Solicit Map Request) by map server; " +
-    //                "By default SMR is not activated")
+    /** Enable to send SMR(Solicit Map Request) by map server; by default SMR is not activated. */
     private boolean enableSmr = false;
 
     ExecutorService executorMessages =
@@ -145,8 +148,8 @@
      * @param properties a set of properties that contained in component context
      */
     private void initAuthConfig(Dictionary<?, ?> properties) {
-        authConfig.updateLispAuthKey(get(properties, "lispAuthKey"));
-        authConfig.updateLispAuthKeyId(getIntegerProperty(properties, "lispAuthKeyId"));
+        authConfig.updateLispAuthKey(get(properties, LISP_AUTH_KEY));
+        authConfig.updateLispAuthKeyId(getIntegerProperty(properties, LISP_AUTH_KEY_ID));
     }
 
     /**
@@ -157,14 +160,14 @@
     private void readComponentConfiguration(ComponentContext context) {
         Dictionary<?, ?> properties = context.getProperties();
 
-        String lispAuthKeyStr = Tools.get(properties, "lispAuthKey");
-        lispAuthKey = lispAuthKeyStr != null ? lispAuthKeyStr : DEFAULT_LISP_AUTH_KEY;
+        String lispAuthKeyStr = Tools.get(properties, LISP_AUTH_KEY);
+        lispAuthKey = lispAuthKeyStr != null ? lispAuthKeyStr : LISP_AUTH_KEY_DEFAULT;
         authConfig.updateLispAuthKey(lispAuthKey);
         log.info("Configured. LISP authentication key is {}", lispAuthKey);
 
-        Integer lispAuthMethodInt = Tools.getIntegerProperty(properties, "lispAuthKeyId");
+        Integer lispAuthMethodInt = Tools.getIntegerProperty(properties, LISP_AUTH_KEY_ID);
         if (lispAuthMethodInt == null) {
-            lispAuthKeyId = DEFAULT_LISP_AUTH_KEY_ID;
+            lispAuthKeyId = LISP_AUTH_KEY_ID_DEFAULT;
             log.info("LISP authentication method is not configured, default value is {}", lispAuthKeyId);
         } else {
             lispAuthKeyId = lispAuthMethodInt;
@@ -172,14 +175,14 @@
         }
         authConfig.updateLispAuthKeyId(lispAuthKeyId);
 
-        Boolean enableSmr = Tools.isPropertyEnabled(properties, "enableSmr");
+        Boolean enableSmr = Tools.isPropertyEnabled(properties, ENABLE_SMR);
         if (enableSmr == null) {
             log.info("Enable SMR is not configured, " +
-                    "using current value of {}", this.enableSmr);
+                             "using current value of {}", this.enableSmr);
         } else {
             this.enableSmr = enableSmr;
             log.info("Configured. Sending SMR through map server is {}",
-                    this.enableSmr ? "enabled" : "disabled");
+                     this.enableSmr ? "enabled" : "disabled");
         }
     }
 
@@ -191,9 +194,9 @@
     @Override
     public Iterable<LispRouter> getSubscribedRouters() {
         return connectedRouters.entrySet()
-                                .stream()
-                                .filter(e -> e.getValue().isSubscribed())
-                                .collect(toConcurrentMap(Map.Entry::getKey,
+                .stream()
+                .filter(e -> e.getValue().isSubscribed())
+                .collect(toConcurrentMap(Map.Entry::getKey,
                                          Map.Entry::getValue)).values();
     }
 
@@ -269,7 +272,7 @@
 
             if (connectedRouters.get(routerId) != null) {
                 log.warn("Trying to add connectedRouter but found a previous " +
-                          "value for routerId: {}", routerId);
+                                 "value for routerId: {}", routerId);
                 return false;
             } else {
                 log.info("Added router {}", routerId);
@@ -286,7 +289,7 @@
 
             if (connectedRouters.get(routerId) == null) {
                 log.error("Trying to remove router {} from connectedRouter " +
-                          "list but no element was found", routerId);
+                                  "list but no element was found", routerId);
             } else {
                 log.info("Removed router {}", routerId);
                 connectedRouters.remove(routerId);
@@ -353,7 +356,7 @@
         private final boolean isIncoming;
 
         LispMessageHandler(LispRouterId routerId,
-                                  LispMessage message, boolean isIncoming) {
+                           LispMessage message, boolean isIncoming) {
             this.routerId = routerId;
             this.message = message;
             this.isIncoming = isIncoming;
@@ -375,10 +378,10 @@
      * LISP incoming message handler.
      */
     protected final class LispIncomingMessageHandler
-                    extends LispMessageHandler implements Runnable {
+            extends LispMessageHandler implements Runnable {
 
         LispIncomingMessageHandler(LispRouterId routerId,
-                                          LispMessage message) {
+                                   LispMessage message) {
             super(routerId, message, true);
         }
     }
@@ -387,10 +390,10 @@
      * LISP outgoing message handler.
      */
     protected final class LispOutgoingMessageHandler
-                    extends LispMessageHandler implements Runnable {
+            extends LispMessageHandler implements Runnable {
 
         LispOutgoingMessageHandler(LispRouterId routerId,
-                                          LispMessage message) {
+                                   LispMessage message) {
             super(routerId, message, false);
         }
     }
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/OsgiPropertyConstants.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/OsgiPropertyConstants.java
new file mode 100644
index 0000000..9295734
--- /dev/null
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/OsgiPropertyConstants.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.lisp.ctl.impl;
+
+/**
+ * Constants for default values of configurable properties.
+ */
+public final class OsgiPropertyConstants {
+
+    private OsgiPropertyConstants() {}
+
+    public static final String LISP_AUTH_KEY = "lispAuthKey";
+    public static final String LISP_AUTH_KEY_DEFAULT = "onos";
+
+    public static final String LISP_AUTH_KEY_ID = "lispAuthKeyId";
+    public static final int LISP_AUTH_KEY_ID_DEFAULT = 1;
+
+    public static final String ENABLE_SMR = "enableSmr";
+    public static final boolean ENABLE_SMR_DEFAULT = false;
+
+}
diff --git a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/impl/NetconfControllerImpl.java b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/impl/NetconfControllerImpl.java
index e18714c..0395dee 100644
--- a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/impl/NetconfControllerImpl.java
+++ b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/impl/NetconfControllerImpl.java
@@ -61,39 +61,33 @@
 import static org.onlab.util.Tools.get;
 import static org.onlab.util.Tools.getIntegerProperty;
 import static org.onlab.util.Tools.groupedThreads;
+import static org.onosproject.netconf.ctl.impl.OsgiPropertyConstants.*;
 
 /**
  * The implementation of NetconfController.
  */
-@Component(immediate = true, service = NetconfController.class)
+@Component(immediate = true, service = NetconfController.class,
+        property = {
+                NETCONF_CONNECT_TIMEOUT + ":Integer=" + NETCONF_CONNECT_TIMEOUT_DEFAULT,
+                NETCONF_REPLY_TIMEOUT + ":Integer=" + NETCONF_REPLY_TIMEOUT_DEFAULT,
+                NETCONF_IDLE_TIMEOUT + ":Integer=" + NETCONF_IDLE_TIMEOUT_DEFAULT,
+                SSH_LIBRARY + "=" + SSH_LIBRARY_DEFAULT,
+        })
 public class NetconfControllerImpl implements NetconfController {
 
-    protected static final int DEFAULT_CONNECT_TIMEOUT_SECONDS = 5;
-    private static final String PROP_NETCONF_CONNECT_TIMEOUT = "netconfConnectTimeout";
-    // FIXME @Property should not be static
-    //@Property(name = PROP_NETCONF_CONNECT_TIMEOUT, intValue = DEFAULT_CONNECT_TIMEOUT_SECONDS,
-    //        label = "Time (in seconds) to wait for a NETCONF connect.")
-    protected static int netconfConnectTimeout = DEFAULT_CONNECT_TIMEOUT_SECONDS;
+    /** Time (in seconds) to wait for a NETCONF connect. */
+    protected static int netconfConnectTimeout = NETCONF_CONNECT_TIMEOUT_DEFAULT;
 
-    private static final String PROP_NETCONF_REPLY_TIMEOUT = "netconfReplyTimeout";
-    protected static final int DEFAULT_REPLY_TIMEOUT_SECONDS = 5;
-    // FIXME @Property should not be static
-    //@Property(name = PROP_NETCONF_REPLY_TIMEOUT, intValue = DEFAULT_REPLY_TIMEOUT_SECONDS,
-    //        label = "Time (in seconds) waiting for a NetConf reply")
-    protected static int netconfReplyTimeout = DEFAULT_REPLY_TIMEOUT_SECONDS;
+    /** Time (in seconds) waiting for a NetConf reply. */
+    protected static int netconfReplyTimeout = NETCONF_REPLY_TIMEOUT_DEFAULT;
 
-    private static final String PROP_NETCONF_IDLE_TIMEOUT = "netconfIdleTimeout";
-    protected static final int DEFAULT_IDLE_TIMEOUT_SECONDS = 300;
-    // FIXME @Property should not be static
-    //@Property(name = PROP_NETCONF_IDLE_TIMEOUT, intValue = DEFAULT_IDLE_TIMEOUT_SECONDS,
-    //        label = "Time (in seconds) SSH session will close if no traffic seen")
-    protected static int netconfIdleTimeout = DEFAULT_IDLE_TIMEOUT_SECONDS;
+    /** Time (in seconds) SSH session will close if no traffic seen. */
+    protected static int netconfIdleTimeout = NETCONF_IDLE_TIMEOUT_DEFAULT;
 
-    private static final String SSH_LIBRARY = "sshLibrary";
-    private static final String APACHE_MINA_STR = "apache-mina";
-    //@Property(name = SSH_LIBRARY, value = APACHE_MINA_STR,
-    //        label = "Ssh client library to use")
-    protected NetconfSshClientLib sshLibrary = NetconfSshClientLib.APACHE_MINA;
+    /** SSH client library to use. */
+    protected static String sshLibrary = SSH_LIBRARY_DEFAULT;
+
+    protected NetconfSshClientLib sshClientLib = NetconfSshClientLib.APACHE_MINA;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected ComponentConfigService cfgService;
@@ -115,7 +109,7 @@
     private final NetconfDeviceOutputEventListener downListener = new DeviceDownEventListener();
 
     protected Set<NetconfDeviceListener> netconfDeviceListeners = new CopyOnWriteArraySet<>();
-    protected NetconfDeviceFactory deviceFactory = (deviceInfo) -> new DefaultNetconfDevice(deviceInfo);
+    protected NetconfDeviceFactory deviceFactory = DefaultNetconfDevice::new;
 
     protected final ExecutorService executor =
             Executors.newCachedThreadPool(groupedThreads("onos/netconfdevicecontroller",
@@ -145,10 +139,11 @@
     @Modified
     public void modified(ComponentContext context) {
         if (context == null) {
-            netconfReplyTimeout = DEFAULT_REPLY_TIMEOUT_SECONDS;
-            netconfConnectTimeout = DEFAULT_CONNECT_TIMEOUT_SECONDS;
-            netconfIdleTimeout = DEFAULT_IDLE_TIMEOUT_SECONDS;
-            sshLibrary = NetconfSshClientLib.APACHE_MINA;
+            netconfReplyTimeout = NETCONF_REPLY_TIMEOUT_DEFAULT;
+            netconfConnectTimeout = NETCONF_CONNECT_TIMEOUT_DEFAULT;
+            netconfIdleTimeout = NETCONF_IDLE_TIMEOUT_DEFAULT;
+            sshLibrary = SSH_LIBRARY_DEFAULT;
+            sshClientLib = NetconfSshClientLib.APACHE_MINA;
             log.info("No component configuration");
             return;
         }
@@ -158,11 +153,11 @@
         String newSshLibrary;
 
         int newNetconfReplyTimeout = getIntegerProperty(
-                properties, PROP_NETCONF_REPLY_TIMEOUT, netconfReplyTimeout);
+                properties, NETCONF_REPLY_TIMEOUT, netconfReplyTimeout);
         int newNetconfConnectTimeout = getIntegerProperty(
-                properties, PROP_NETCONF_CONNECT_TIMEOUT, netconfConnectTimeout);
+                properties, NETCONF_CONNECT_TIMEOUT, netconfConnectTimeout);
         int newNetconfIdleTimeout = getIntegerProperty(
-                properties, PROP_NETCONF_IDLE_TIMEOUT, netconfIdleTimeout);
+                properties, NETCONF_IDLE_TIMEOUT, netconfIdleTimeout);
 
         newSshLibrary = get(properties, SSH_LIBRARY);
 
@@ -181,12 +176,13 @@
         netconfConnectTimeout = newNetconfConnectTimeout;
         netconfIdleTimeout = newNetconfIdleTimeout;
         if (newSshLibrary != null) {
-            sshLibrary = NetconfSshClientLib.getEnum(newSshLibrary);
+            sshLibrary = newSshLibrary;
+            sshClientLib = NetconfSshClientLib.getEnum(newSshLibrary);
         }
         log.info("Settings: {} = {}, {} = {}, {} = {}, {} = {}",
-                 PROP_NETCONF_REPLY_TIMEOUT, netconfReplyTimeout,
-                 PROP_NETCONF_CONNECT_TIMEOUT, netconfConnectTimeout,
-                 PROP_NETCONF_IDLE_TIMEOUT, netconfIdleTimeout,
+                 NETCONF_REPLY_TIMEOUT, netconfReplyTimeout,
+                 NETCONF_CONNECT_TIMEOUT, netconfConnectTimeout,
+                 NETCONF_IDLE_TIMEOUT, netconfIdleTimeout,
                  SSH_LIBRARY, sshLibrary);
     }
 
diff --git a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/impl/OsgiPropertyConstants.java b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/impl/OsgiPropertyConstants.java
new file mode 100644
index 0000000..6fcdcfd
--- /dev/null
+++ b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/impl/OsgiPropertyConstants.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.netconf.ctl.impl;
+
+/**
+ * Constants for default values of configurable properties.
+ */
+public final class OsgiPropertyConstants {
+
+    private OsgiPropertyConstants() {}
+
+    public static final String NETCONF_CONNECT_TIMEOUT = "netconfConnectTimeout";
+    public static final int NETCONF_CONNECT_TIMEOUT_DEFAULT = 5;
+
+    public static final String NETCONF_REPLY_TIMEOUT = "netconfReplyTimeout";
+    public static final int NETCONF_REPLY_TIMEOUT_DEFAULT = 5;
+
+    public static final String NETCONF_IDLE_TIMEOUT = "netconfIdleTimeout";
+    public static final int NETCONF_IDLE_TIMEOUT_DEFAULT = 300;
+
+    public static final String SSH_LIBRARY = "sshLibrary";
+    public static final String SSH_LIBRARY_DEFAULT = "apache-mina";
+}
diff --git a/protocols/netconf/ctl/src/test/java/org/onosproject/netconf/ctl/impl/NetconfControllerImplTest.java b/protocols/netconf/ctl/src/test/java/org/onosproject/netconf/ctl/impl/NetconfControllerImplTest.java
index 459559c..44011f1 100644
--- a/protocols/netconf/ctl/src/test/java/org/onosproject/netconf/ctl/impl/NetconfControllerImplTest.java
+++ b/protocols/netconf/ctl/src/test/java/org/onosproject/netconf/ctl/impl/NetconfControllerImplTest.java
@@ -58,6 +58,9 @@
 
 import static org.hamcrest.Matchers.*;
 import static org.junit.Assert.*;
+import static org.onosproject.netconf.ctl.impl.OsgiPropertyConstants.NETCONF_CONNECT_TIMEOUT_DEFAULT;
+import static org.onosproject.netconf.ctl.impl.OsgiPropertyConstants.NETCONF_IDLE_TIMEOUT_DEFAULT;
+import static org.onosproject.netconf.ctl.impl.OsgiPropertyConstants.NETCONF_REPLY_TIMEOUT_DEFAULT;
 
 /**
  * Unit tests for the Netconf controller implementation test.
@@ -125,9 +128,9 @@
         ctrl.deviceService = deviceService;
         ctrl.deviceKeyService = deviceKeyService;
         ctrl.netCfgService = netCfgService;
-        NetconfControllerImpl.netconfConnectTimeout = NetconfControllerImpl.DEFAULT_CONNECT_TIMEOUT_SECONDS;
-        NetconfControllerImpl.netconfIdleTimeout = NetconfControllerImpl.DEFAULT_IDLE_TIMEOUT_SECONDS;
-        NetconfControllerImpl.netconfReplyTimeout = NetconfControllerImpl.DEFAULT_REPLY_TIMEOUT_SECONDS;
+        NetconfControllerImpl.netconfConnectTimeout = NETCONF_CONNECT_TIMEOUT_DEFAULT;
+        NetconfControllerImpl.netconfIdleTimeout = NETCONF_IDLE_TIMEOUT_DEFAULT;
+        NetconfControllerImpl.netconfReplyTimeout = NETCONF_REPLY_TIMEOUT_DEFAULT;
 
         //Creating mock devices
         deviceInfo1 = new NetconfDeviceInfo("device1", "001", IpAddress.valueOf(DEVICE_1_IP), DEVICE_1_PORT);
@@ -183,9 +186,9 @@
     public void tearDown() {
         ctrl.deactivate();
         // resetting static variables..
-        NetconfControllerImpl.netconfConnectTimeout = NetconfControllerImpl.DEFAULT_CONNECT_TIMEOUT_SECONDS;
-        NetconfControllerImpl.netconfIdleTimeout = NetconfControllerImpl.DEFAULT_IDLE_TIMEOUT_SECONDS;
-        NetconfControllerImpl.netconfReplyTimeout = NetconfControllerImpl.DEFAULT_REPLY_TIMEOUT_SECONDS;
+        NetconfControllerImpl.netconfConnectTimeout = NETCONF_CONNECT_TIMEOUT_DEFAULT;
+        NetconfControllerImpl.netconfIdleTimeout = NETCONF_IDLE_TIMEOUT_DEFAULT;
+        NetconfControllerImpl.netconfReplyTimeout = NETCONF_REPLY_TIMEOUT_DEFAULT;
     }
 
     /**
diff --git a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java
index e3d16da..2d5213d 100644
--- a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java
+++ b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java
@@ -125,33 +125,26 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected NetworkConfigRegistry netCfgService;
 
-    //@Property(name = "openflowPorts", value = DEFAULT_OFPORT,
-    //        label = "Port numbers (comma separated) used by OpenFlow protocol; default is 6633,6653")
-    //private String openflowPortsValue = OFPORTS_DEFAULT;
+    /** Port numbers (comma separated) used by OpenFlow protocol; default is 6633,6653. */
+    private String openflowPortsValue = OFPORTS_DEFAULT;
 
-    //@Property(name = "workerThreads", intValue = DEFAULT_WORKER_THREADS,
-    //        label = "Number of controller worker threads")
-    //private int workerThreads = DEFAULT_WORKER_THREADS;
+    /** Number of controller worker threads. */
+    private int workerThreads = WORKER_THREADS_DEFAULT;
 
-    //@Property(name = "tlsMode", value = "",
-    //          label = "TLS mode for OpenFlow channel; options are: disabled [default], enabled, strict")
-    //private String tlsModeString;
+      /** TLS mode for OpenFlow channel; options are: disabled [default], enabled, strict. */
+    private String tlsModeString;
 
-    //@Property(name = "keyStore", value = "",
-    //        label = "File path to key store for TLS connections")
-    //private String keyStore;
+    /** File path to key store for TLS connections. */
+    private String keyStore;
 
-    //@Property(name = "keyStorePassword", value = "",
-    //        label = "Key store password")
-    //private String keyStorePassword;
+    /** Key store password. */
+    private String keyStorePassword;
 
-    //@Property(name = "trustStore", value = "",
-    //        label = "File path to trust store for TLS connections")
-    //private String trustStore;
+    /** File path to trust store for TLS connections. */
+    private String trustStore;
 
-    //@Property(name = "trustStorePassword", value = "",
-    //        label = "Trust store password")
-    //private String trustStorePassword;
+    /** Trust store password. */
+    private String trustStorePassword;
 
     protected ExecutorService executorMsgs =
         Executors.newFixedThreadPool(32, groupedThreads("onos/of", "event-stats-%d", log));
diff --git a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OsgiPropertyConstants.java b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OsgiPropertyConstants.java
index 186b85e..a152239 100644
--- a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OsgiPropertyConstants.java
+++ b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OsgiPropertyConstants.java
@@ -25,38 +25,24 @@
     private OsgiPropertyConstants() {
     }
 
-    //@Property(name = "openflowPorts", value = DEFAULT_OFPORT,
-    //        label = "Port numbers (comma separated) used by OpenFlow protocol; default is 6633,6653")
     public static final String OFPORTS = "openflowPorts";
     public static final String OFPORTS_DEFAULT = "6633,6653";
 
-    //@Property(name = "workerThreads", intValue = DEFAULT_WORKER_THREADS,
-    //        label = "Number of controller worker threads")
     public static final String WORKER_THREADS = "workerThreads";
     public static final int WORKER_THREADS_DEFAULT = 0;
 
-    //@Property(name = "tlsMode", value = "",
-    //          label = "TLS mode for OpenFlow channel; options are: disabled [default], enabled, strict")
     public static final String TLS_MODE = "tlsMode";
     public static final String TLS_MODE_DEFAULT = "";
 
-    //@Property(name = "keyStore", value = "",
-    //        label = "File path to key store for TLS connections")
     public static final String KEY_STORE = "keyStore";
     public static final String KEY_STORE_DEFAULT = "";
 
-    //@Property(name = "keyStorePassword", value = "",
-    //        label = "Key store password")
     public static final String KEY_STORE_PASSWORD = "keyStorePassword";
     public static final String KEY_STORE_PASSWORD_DEFAULT = "";
 
-    //@Property(name = "trustStore", value = "",
-    //        label = "File path to trust store for TLS connections")
     public static final String TRUST_STORE = "trustStore";
     public static final String TRUST_STORE_DEFAULT = "";
 
-    //@Property(name = "trustStorePassword", value = "",
-    //        label = "Trust store password")
     public static final String TRUST_STORE_PASSWORD = "trustStorePassword";
     public static final String TRUST_STORE_PASSWORD_DEFAULT = "";
 
diff --git a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbConstant.java b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbConstant.java
index ddd93eb..ee13e4c 100644
--- a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbConstant.java
+++ b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbConstant.java
@@ -127,9 +127,4 @@
 
     public static final boolean OVSDB_TLS_FLAG = false;
 
-    //TODO CONFIG_DIR is duplicated from ConfigFileBasedClusterMetadataProvider
-    public static final String CONFIG_DIR = "../config/";
-    public static final String KS_FILE_NAME = "onos.jks";
-    public static final String DEFAULT_KS_FILE = CONFIG_DIR + KS_FILE_NAME;
-    public static final String DEFAULT_KS_PASSWORD = "222222";
 }
diff --git a/protocols/ovsdb/ctl/src/main/java/org/onosproject/ovsdb/controller/impl/OsgiPropertyConstants.java b/protocols/ovsdb/ctl/src/main/java/org/onosproject/ovsdb/controller/impl/OsgiPropertyConstants.java
new file mode 100644
index 0000000..44630c9
--- /dev/null
+++ b/protocols/ovsdb/ctl/src/main/java/org/onosproject/ovsdb/controller/impl/OsgiPropertyConstants.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.ovsdb.controller.impl;
+
+/**
+ * Constants for default values of configurable properties.
+ */
+public final class OsgiPropertyConstants {
+
+    private OsgiPropertyConstants() {}
+
+    public static final String SERVER_MODE = "";
+    public static final boolean SERVER_MODE_DEFAULT = false;
+
+    public static final String OVSDB_TLS_FLAG = "enableOvsdbTls";
+    public static final boolean OVSDB_TLS_FLAG_DEFAULT = false;
+
+    public static final String KS_FILE = "keyStoreLocation";
+    public static final String KS_FILE_DEFAULT = "../config/onos.jks";
+
+    public static final String TS_FILE = "trustStoreLocation";
+    public static final String TS_FILE_DEFAULT = "../config/onos.jks";
+
+    public static final String KS_PASSWORD = "keyStorePassword";
+    public static final String KS_PASSWORD_DEFAULT = "222222";
+
+    public static final String TS_PASSWORD = "trustStorePassword";
+    public static final String TS_PASSWORD_DEFAULT = "222222";
+
+}
diff --git a/protocols/ovsdb/ctl/src/main/java/org/onosproject/ovsdb/controller/impl/OvsdbControllerImpl.java b/protocols/ovsdb/ctl/src/main/java/org/onosproject/ovsdb/controller/impl/OvsdbControllerImpl.java
index dde2416..428a411 100644
--- a/protocols/ovsdb/ctl/src/main/java/org/onosproject/ovsdb/controller/impl/OvsdbControllerImpl.java
+++ b/protocols/ovsdb/ctl/src/main/java/org/onosproject/ovsdb/controller/impl/OvsdbControllerImpl.java
@@ -81,16 +81,21 @@
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.onlab.util.Tools.get;
-import static org.onosproject.ovsdb.controller.OvsdbConstant.DEFAULT_KS_FILE;
-import static org.onosproject.ovsdb.controller.OvsdbConstant.DEFAULT_KS_PASSWORD;
-import static org.onosproject.ovsdb.controller.OvsdbConstant.OVSDB_TLS_FLAG;
-import static org.onosproject.ovsdb.controller.OvsdbConstant.SERVER_MODE;
 import static org.onosproject.ovsdb.controller.impl.Controller.MIN_KS_LENGTH;
+import static org.onosproject.ovsdb.controller.impl.OsgiPropertyConstants.*;
 
 /**
  * The implementation of OvsdbController.
  */
-@Component(immediate = true, service = OvsdbController.class)
+@Component(immediate = true, service = OvsdbController.class,
+        property = {
+                "serverMode" + ":Boolean=" + SERVER_MODE_DEFAULT,
+                "enableOvsdbTls" + ":Boolean=" + OVSDB_TLS_FLAG_DEFAULT,
+                "keyStoreLocation" + "=" + KS_FILE_DEFAULT,
+                "keyStorePassword" + "=" + KS_PASSWORD_DEFAULT,
+                "trustStoreLocation" + "=" + TS_FILE_DEFAULT,
+                "trustStorePassword" + "=" + TS_PASSWORD_DEFAULT,
+        })
 public class OvsdbControllerImpl implements OvsdbController {
 
     public static final Logger log = LoggerFactory
@@ -110,29 +115,23 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected ComponentConfigService configService;
 
-    //@Property(name = "serverMode", boolValue = SERVER_MODE,
-    //        label = "Run as server mode, listen on 6640 port")
-    private boolean serverMode = SERVER_MODE;
+    /** Run as server mode, listen on 6640 port. */
+    private boolean serverMode = SERVER_MODE_DEFAULT;
 
-    //@Property(name = "enableOvsdbTls", boolValue = OVSDB_TLS_FLAG,
-    //        label = "TLS mode for OVSDB channel; options are: true false")
-    private boolean enableOvsdbTls = OVSDB_TLS_FLAG;
+    /** TLS mode for OVSDB channel; options are: true false. */
+    private boolean enableOvsdbTls = OVSDB_TLS_FLAG_DEFAULT;
 
-    //@Property(name = "keyStoreLocation", value = DEFAULT_KS_FILE,
-    //        label = "File path to KeyStore for Ovsdb TLS Connections")
-    protected String keyStoreLocation = DEFAULT_KS_FILE;
+    /** File path to KeyStore for Ovsdb TLS Connections. */
+    protected String keyStoreLocation = KS_FILE_DEFAULT;
 
-    //@Property(name = "trustStoreLocation", value = DEFAULT_KS_FILE,
-    //        label = "File path to TrustStore for Ovsdb TLS Connections")
-    protected String trustStoreLocation = DEFAULT_KS_FILE;
+    /** File path to TrustStore for Ovsdb TLS Connections. */
+    protected String trustStoreLocation = TS_FILE_DEFAULT;
 
-    //@Property(name = "keyStorePassword", value = DEFAULT_KS_PASSWORD,
-    //        label = "KeyStore Password")
-    protected String keyStorePassword = DEFAULT_KS_PASSWORD;
+    /** KeyStore Password. */
+    protected String keyStorePassword = KS_PASSWORD_DEFAULT;
 
-    //@Property(name = "trustStorePassword", value = DEFAULT_KS_PASSWORD,
-    //        label = "TrustStore Password")
-    protected String trustStorePassword = DEFAULT_KS_PASSWORD;
+    /** TrustStore Password. */
+    protected String trustStorePassword = TS_PASSWORD_DEFAULT;
 
     @Activate
     public void activate(ComponentContext context) {
@@ -180,7 +179,7 @@
     private TlsParams getTlsParams(Dictionary<?, ?> properties) {
         TlsMode mode = null;
 
-        boolean flag = Tools.isPropertyEnabled(properties, "enableOvsdbTls");
+        boolean flag = Tools.isPropertyEnabled(properties, OVSDB_TLS_FLAG);
         if (Objects.isNull(flag) || !flag) {
             log.warn("OvsdbTLS Disabled");
             mode = TlsMode.DISABLED;
@@ -191,25 +190,25 @@
 
         String ksLocation = null, tsLocation = null, ksPwd = null, tsPwd = null;
 
-        ksLocation = get(properties, "keyStoreLocation");
+        ksLocation = get(properties, KS_FILE);
         if (Strings.isNullOrEmpty(ksLocation)) {
             log.warn("trustStoreLocation is not configured");
             mode = TlsMode.DISABLED;
         }
 
-        tsLocation = get(properties, "trustStoreLocation");
+        tsLocation = get(properties, TS_FILE);
         if (Strings.isNullOrEmpty(tsLocation)) {
             log.warn("trustStoreLocation is not configured");
             mode = TlsMode.DISABLED;
         }
 
-        ksPwd = get(properties, "keyStorePassword");
+        ksPwd = get(properties, KS_PASSWORD);
         if (Strings.isNullOrEmpty(ksPwd) || MIN_KS_LENGTH > ksPwd.length()) {
             log.warn("keyStorePassword is not configured or Password length too small");
             mode = TlsMode.DISABLED;
         }
 
-        tsPwd = get(properties, "trustStorePassword");
+        tsPwd = get(properties, TS_PASSWORD);
         if (Strings.isNullOrEmpty(tsPwd) || MIN_KS_LENGTH > tsPwd.length()) {
             log.warn("trustStorePassword is not configured or Password length too small");
             mode = TlsMode.DISABLED;
diff --git a/protocols/ovsdb/ctl/src/main/java/org/onosproject/ovsdb/controller/impl/TlsParams.java b/protocols/ovsdb/ctl/src/main/java/org/onosproject/ovsdb/controller/impl/TlsParams.java
index dfe7fa9..f71f8fa 100644
--- a/protocols/ovsdb/ctl/src/main/java/org/onosproject/ovsdb/controller/impl/TlsParams.java
+++ b/protocols/ovsdb/ctl/src/main/java/org/onosproject/ovsdb/controller/impl/TlsParams.java
@@ -29,8 +29,7 @@
 import java.util.EnumSet;
 import java.util.Objects;
 
-import static org.onosproject.ovsdb.controller.OvsdbConstant.DEFAULT_KS_FILE;
-import static org.onosproject.ovsdb.controller.OvsdbConstant.DEFAULT_KS_PASSWORD;
+import static org.onosproject.ovsdb.controller.impl.OsgiPropertyConstants.*;
 
 /**
  * TlsParams Class for properties required for configuring OVSDB TLS Connection.
@@ -69,10 +68,10 @@
      */
     TlsParams() {
         this.mode = TlsMode.DISABLED;
-        this.ksLocation = DEFAULT_KS_FILE;
-        this.tsLocation = DEFAULT_KS_FILE;
-        this.ksPwd = DEFAULT_KS_PASSWORD;
-        this.tsPwd = DEFAULT_KS_PASSWORD;
+        this.ksLocation = KS_FILE_DEFAULT;
+        this.tsLocation = TS_FILE_DEFAULT;
+        this.ksPwd = KS_PASSWORD_DEFAULT;
+        this.tsPwd = TS_PASSWORD_DEFAULT;
         this.ksSignature = getSha1Checksum(ksLocation);
         this.tsSignature = getSha1Checksum(tsLocation);
     }
diff --git a/providers/link/src/main/java/org/onosproject/provider/linkdiscovery/impl/OsgiPropertyDefaults.java b/protocols/xmpp/core/ctl/src/main/java/org/onosproject/xmpp/core/ctl/OsgiPropertyConstants.java
similarity index 72%
copy from providers/link/src/main/java/org/onosproject/provider/linkdiscovery/impl/OsgiPropertyDefaults.java
copy to protocols/xmpp/core/ctl/src/main/java/org/onosproject/xmpp/core/ctl/OsgiPropertyConstants.java
index ba85b86..24a3b7c 100644
--- a/providers/link/src/main/java/org/onosproject/provider/linkdiscovery/impl/OsgiPropertyDefaults.java
+++ b/protocols/xmpp/core/ctl/src/main/java/org/onosproject/xmpp/core/ctl/OsgiPropertyConstants.java
@@ -14,16 +14,16 @@
  * limitations under the License.
  */
 
-package org.onosproject.provider.linkdiscovery.impl;
+package org.onosproject.xmpp.core.ctl;
 
 /**
  * Constants for default values of configurable properties.
  */
-public final class OsgiPropertyDefaults {
+public final class OsgiPropertyConstants {
 
-    private OsgiPropertyDefaults() {}
+    private OsgiPropertyConstants() {}
 
-    public static final int POLL_DELAY_SECONDS_DEFAULT = 20;
-    public static final int POLL_FREQUENCY_SECONDS_DEFAULT = 10;
+    public static final String XMPP_PORT = "xmppPort";
+    public static final String XMPP_PORT_DEFAULT = "5269";
 
 }
diff --git a/protocols/xmpp/core/ctl/src/main/java/org/onosproject/xmpp/core/ctl/XmppControllerImpl.java b/protocols/xmpp/core/ctl/src/main/java/org/onosproject/xmpp/core/ctl/XmppControllerImpl.java
index 178018a..da42c1c 100644
--- a/protocols/xmpp/core/ctl/src/main/java/org/onosproject/xmpp/core/ctl/XmppControllerImpl.java
+++ b/protocols/xmpp/core/ctl/src/main/java/org/onosproject/xmpp/core/ctl/XmppControllerImpl.java
@@ -49,6 +49,9 @@
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.CopyOnWriteArraySet;
 
+import static org.onosproject.xmpp.core.ctl.OsgiPropertyConstants.XMPP_PORT;
+import static org.onosproject.xmpp.core.ctl.OsgiPropertyConstants.XMPP_PORT_DEFAULT;
+
 
 /**
  * The main class (bundle) of XMPP protocol.
@@ -58,11 +61,13 @@
  * 3. Configuration parameters initialization.
  * 4. Notifing listeners about XMPP events/packets.
  */
-@Component(immediate = true, service = XmppController.class)
+@Component(immediate = true, service = XmppController.class,
+        property = {
+                XMPP_PORT + "=" + XMPP_PORT_DEFAULT,
+        })
 public class XmppControllerImpl implements XmppController {
 
     private static final String APP_ID = "org.onosproject.xmpp";
-    private static final String XMPP_PORT = "5269";
 
     private static final Logger log =
             LoggerFactory.getLogger(XmppControllerImpl.class);
@@ -75,10 +80,8 @@
     protected ComponentConfigService cfgService;
 
     // configuration properties definition
-    //@Property(name = "xmppPort", value = XMPP_PORT,
-    //        label = "Port number used by XMPP protocol; default is 5269")
-    private String xmppPort = XMPP_PORT;
-
+    /** Port number used by XMPP protocol; default is 5269. */
+    private String xmppPort = XMPP_PORT_DEFAULT;
 
     // listener declaration
     protected Set<XmppDeviceListener> xmppDeviceListeners = new CopyOnWriteArraySet<XmppDeviceListener>();
diff --git a/protocols/xmpp/core/ctl/src/main/java/org/onosproject/xmpp/core/ctl/XmppServer.java b/protocols/xmpp/core/ctl/src/main/java/org/onosproject/xmpp/core/ctl/XmppServer.java
index 2bc96fd..0970d82 100644
--- a/protocols/xmpp/core/ctl/src/main/java/org/onosproject/xmpp/core/ctl/XmppServer.java
+++ b/protocols/xmpp/core/ctl/src/main/java/org/onosproject/xmpp/core/ctl/XmppServer.java
@@ -35,6 +35,7 @@
 import java.util.Dictionary;
 
 import static org.onlab.util.Tools.get;
+import static org.onosproject.xmpp.core.ctl.OsgiPropertyConstants.XMPP_PORT;
 
 /**
  *  The XMPP server class. Starts XMPP server and listens to new XMPP device TCP connections.
@@ -124,7 +125,7 @@
      * @param properties properties to be set
      */
     public void setConfiguration(Dictionary<?, ?> properties) {
-        String port = get(properties, "xmppPort");
+        String port = get(properties, XMPP_PORT);
         if (!Strings.isNullOrEmpty(port)) {
             this.port = Integer.parseInt(port);
         }
diff --git a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java
index 6e8fe1d..4374089 100644
--- a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java
+++ b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java
@@ -106,9 +106,7 @@
 import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
 import static org.onlab.util.Tools.groupedThreads;
 import static org.onosproject.net.device.DeviceEvent.Type;
-import static org.onosproject.provider.general.device.impl.OsgiPropertyDefaults.OP_TIMEOUT_SHORT_DEFAULT;
-import static org.onosproject.provider.general.device.impl.OsgiPropertyDefaults.PROBE_FREQUENCY_DEFAULT;
-import static org.onosproject.provider.general.device.impl.OsgiPropertyDefaults.STATS_POLL_FREQUENCY_DEFAULT;
+import static org.onosproject.provider.general.device.impl.OsgiPropertyConstants.*;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -119,9 +117,9 @@
 @Beta
 @Component(immediate = true,
         property = {
-            "deviceStatsPollFrequency:Integer=" + STATS_POLL_FREQUENCY_DEFAULT,
-            "deviceProbeFrequency:Integer=" + PROBE_FREQUENCY_DEFAULT,
-            "deviceOperationTimeoutShort:Integer=" + OP_TIMEOUT_SHORT_DEFAULT,
+                STATS_POLL_FREQUENCY + ":Integer=" + STATS_POLL_FREQUENCY_DEFAULT,
+                PROBE_FREQUENCY + ":Integer=" + PROBE_FREQUENCY_DEFAULT,
+                OP_TIMEOUT_SHORT + ":Integer=" + OP_TIMEOUT_SHORT_DEFAULT,
         })
 public class GeneralDeviceProvider extends AbstractProvider
         implements DeviceProvider {
@@ -166,23 +164,20 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     private PiPipeconfWatchdogService pipeconfWatchdogService;
 
-    private static final String STATS_POLL_FREQUENCY = "deviceStatsPollFrequency";
-    //@Property(name = STATS_POLL_FREQUENCY, intValue = DEFAULT_STATS_POLL_FREQUENCY,
-    //        label = "Configure poll frequency for port status and statistics; " +
-    //                "default is 10 sec")
+    /**
+     * Configure poll frequency for port status and statistics; default is 10 sec.
+     */
     private int statsPollFrequency = STATS_POLL_FREQUENCY_DEFAULT;
 
-    private static final String PROBE_FREQUENCY = "deviceProbeFrequency";
-    //@Property(name = PROBE_FREQUENCY, intValue = DEFAULT_PROBE_FREQUENCY,
-    //        label = "Configure probe frequency for checking device availability; " +
-    //                "default is 10 sec")
+    /**
+     * Configure probe frequency for checking device availability; default is 10 sec.
+     */
     private int probeFrequency = PROBE_FREQUENCY_DEFAULT;
 
-    private static final String OP_TIMEOUT_SHORT = "deviceOperationTimeoutShort";
-    //@Property(name = OP_TIMEOUT_SHORT, intValue = DEFAULT_OP_TIMEOUT_SHORT,
-    //        label = "Configure timeout in seconds for device operations " +
-    //                "that are supposed to take a short time " +
-    //                "(e.g. checking device reachability); default is 10 seconds")
+    /**
+     * Configure timeout in seconds for device operations that are supposed to take a short time
+     * (e.g. checking device reachability); default is 10 seconds.
+     */
     private int opTimeoutShort = OP_TIMEOUT_SHORT_DEFAULT;
 
     //FIXME to be removed when netcfg will issue device events in a bundle or
diff --git a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/OsgiPropertyDefaults.java b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/OsgiPropertyConstants.java
similarity index 74%
rename from providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/OsgiPropertyDefaults.java
rename to providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/OsgiPropertyConstants.java
index 90cf437..84419f4 100644
--- a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/OsgiPropertyDefaults.java
+++ b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/OsgiPropertyConstants.java
@@ -19,12 +19,17 @@
 /**
  * Constants for default values of configurable properties.
  */
-public final class OsgiPropertyDefaults {
+public final class OsgiPropertyConstants {
 
-    private OsgiPropertyDefaults() {}
+    private OsgiPropertyConstants() {}
 
+    public static final String STATS_POLL_FREQUENCY = "deviceStatsPollFrequency";
     public static final int STATS_POLL_FREQUENCY_DEFAULT = 10;
+
+    public static final String PROBE_FREQUENCY = "deviceProbeFrequency";
     public static final int PROBE_FREQUENCY_DEFAULT = 10;
+
+    public static final String OP_TIMEOUT_SHORT = "deviceOperationTimeoutShort";
     public static final int OP_TIMEOUT_SHORT_DEFAULT = 10;
 
 }
diff --git a/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java b/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java
index b804c6d..2e4b412 100644
--- a/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java
+++ b/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java
@@ -103,6 +103,7 @@
 
 import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
 import static org.onlab.util.Tools.groupedThreads;
+import static org.onosproject.provider.host.impl.OsgiPropertyConstants.*;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -111,13 +112,13 @@
  */
 @Component(immediate = true, service = HostProvider.class,
         property = {
-                "hostRemovalEnabled:Boolean=true",
-                "requestArp:Boolean=true",
-                "requestIpv6ND:Boolean=false",
-                "useDhcp:Boolean=false",
-                "useDhcp6:Boolean=false",
-                "requestInterceptsEnabled:Boolean=true",
-                "multihomingEnabled:Boolean=false",
+                HOST_REMOVAL_ENABLED + ":Boolean=" + HOST_REMOVAL_ENABLED_DEFAULT,
+                REQUEST_ARP + ":Boolean=" + REQUEST_ARP_DEFAULT,
+                REQUEST_NDP + ":Boolean=" + REQUEST_NDP_DEFAULT,
+                USE_DHCP + ":Boolean=" + USE_DHCP_DEFAULT,
+                USE_DHCP6 + ":Boolean=" + USE_DHCP6_DEFAULT,
+                REQUEST_INTERCEPTS_ENABLED + ":Boolean=" + REQUEST_INTERCEPTS_ENABLED_DEFAULT,
+                MULTIHOMING_ENABLED + ":Boolean=" + MULTIHOMING_ENABLED_DEFAULT,
         })
 public class HostLocationProvider extends AbstractProvider implements HostProvider {
     private final Logger log = getLogger(getClass());
@@ -155,34 +156,25 @@
 
     private ApplicationId appId;
 
-    //@Property(name = "hostRemovalEnabled", boolValue = true,
-    //        label = "Enable host removal on port/device down events")
+    /** Enable host removal on port/device down events. */
     private boolean hostRemovalEnabled = true;
 
-    //@Property(name = "requestArp", boolValue = true,
-    //        label = "Request ARP packets for neighbor discovery by the " +
-    //                "Host Location Provider; default is true")
+    /** Request ARP packets for neighbor discovery by the Host Location Provider; default is true. */
     private boolean requestArp = true;
 
-    //@Property(name = "requestIpv6ND", boolValue = false,
-    //        label = "Requests IPv6 Neighbor Discovery by the " +
-    //                "Host Location Provider; default is false")
+    /** Requests IPv6 Neighbor Discovery by the Host Location Provider; default is false. */
     private boolean requestIpv6ND = false;
 
-    //@Property(name = "useDhcp", boolValue = false,
-    //        label = "Use DHCP to update IP address of the host; default is false")
+    /** Use DHCP to update IP address of the host; default is false. */
     private boolean useDhcp = false;
 
-    //@Property(name = "useDhcp6", boolValue = false,
-    //        label = "Use DHCPv6 to update IP address of the host; default is false")
+    /** Use DHCPv6 to update IP address of the host; default is false. */
     private boolean useDhcp6 = false;
 
-    //@Property(name = "requestInterceptsEnabled", boolValue = true,
-    //        label = "Enable requesting packet intercepts")
+    /** Enable requesting packet intercepts. */
     private boolean requestInterceptsEnabled = true;
 
-    //@Property(name = "multihomingEnabled", boolValue = false,
-    //        label = "Allow hosts to be multihomed")
+    /** Allow hosts to be multihomed. */
     private boolean multihomingEnabled = false;
 
     private HostProviderService providerService;
@@ -322,7 +314,7 @@
         Dictionary<?, ?> properties = context.getProperties();
         Boolean flag;
 
-        flag = Tools.isPropertyEnabled(properties, "hostRemovalEnabled");
+        flag = Tools.isPropertyEnabled(properties, HOST_REMOVAL_ENABLED);
         if (flag == null) {
             log.info("Host removal on port/device down events is not configured, " +
                      "using current value of {}", hostRemovalEnabled);
@@ -332,7 +324,7 @@
                      hostRemovalEnabled ? "enabled" : "disabled");
         }
 
-        flag = Tools.isPropertyEnabled(properties, "requestArp");
+        flag = Tools.isPropertyEnabled(properties, REQUEST_ARP);
         if (flag == null) {
             log.info("Using ARP is not configured, " +
                      "using current value of {}", requestArp);
@@ -342,7 +334,7 @@
                      requestArp ? "enabled" : "disabled");
         }
 
-        flag = Tools.isPropertyEnabled(properties, "requestIpv6ND");
+        flag = Tools.isPropertyEnabled(properties, REQUEST_NDP);
         if (flag == null) {
             log.info("Using IPv6 Neighbor Discovery is not configured, " +
                              "using current value of {}", requestIpv6ND);
@@ -352,7 +344,7 @@
                      requestIpv6ND ? "enabled" : "disabled");
         }
 
-        flag = Tools.isPropertyEnabled(properties, "useDhcp");
+        flag = Tools.isPropertyEnabled(properties, USE_DHCP);
         if (flag == null) {
             log.info("Using DHCP is not configured, " +
                      "using current value of {}", useDhcp);
@@ -362,7 +354,17 @@
                      useDhcp ? "enabled" : "disabled");
         }
 
-        flag = Tools.isPropertyEnabled(properties, "requestInterceptsEnabled");
+        flag = Tools.isPropertyEnabled(properties, USE_DHCP6);
+        if (flag == null) {
+            log.info("Using DHCP6 is not configured, " +
+                             "using current value of {}", useDhcp6);
+        } else {
+            useDhcp6 = flag;
+            log.info("Configured. Using DHCP6 is {}",
+                     useDhcp6 ? "enabled" : "disabled");
+        }
+
+        flag = Tools.isPropertyEnabled(properties, REQUEST_INTERCEPTS_ENABLED);
         if (flag == null) {
             log.info("Request intercepts is not configured, " +
                      "using current value of {}", requestInterceptsEnabled);
@@ -372,7 +374,7 @@
                      requestInterceptsEnabled ? "enabled" : "disabled");
         }
 
-        flag = Tools.isPropertyEnabled(properties, "multihomingEnabled");
+        flag = Tools.isPropertyEnabled(properties, MULTIHOMING_ENABLED);
         if (flag == null) {
             log.info("Multihoming is not configured, " +
                     "using current value of {}", multihomingEnabled);
diff --git a/providers/host/src/main/java/org/onosproject/provider/host/impl/OsgiPropertyConstants.java b/providers/host/src/main/java/org/onosproject/provider/host/impl/OsgiPropertyConstants.java
new file mode 100644
index 0000000..eb8dafe
--- /dev/null
+++ b/providers/host/src/main/java/org/onosproject/provider/host/impl/OsgiPropertyConstants.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.provider.host.impl;
+
+/**
+ * Name/Value constants for properties.
+ */
+
+public final class OsgiPropertyConstants {
+
+    private OsgiPropertyConstants() {
+    }
+
+    public static final String HOST_REMOVAL_ENABLED = "hostRemovalEnabled:Boolean=true";
+    public static final boolean HOST_REMOVAL_ENABLED_DEFAULT = true;
+
+    public static final String REQUEST_ARP = "requestArp";
+    public static final boolean REQUEST_ARP_DEFAULT = true;
+
+    public static final String REQUEST_NDP = "requestIpv6ND";
+    public static final boolean REQUEST_NDP_DEFAULT = false;
+
+    public static final String USE_DHCP = "useDhcp";
+    public static final boolean USE_DHCP_DEFAULT = false;
+
+    public static final String USE_DHCP6 = "useDhcp6";
+    public static final boolean USE_DHCP6_DEFAULT = false;
+
+    public static final String REQUEST_INTERCEPTS_ENABLED = "requestInterceptsEnabled";
+    public static final boolean REQUEST_INTERCEPTS_ENABLED_DEFAULT = true;
+
+    public static final String MULTIHOMING_ENABLED = "multihomingEnabled";
+    public static final boolean MULTIHOMING_ENABLED_DEFAULT = false;
+}
diff --git a/providers/link/src/main/java/org/onosproject/provider/linkdiscovery/impl/LinkDiscoveryProvider.java b/providers/link/src/main/java/org/onosproject/provider/linkdiscovery/impl/LinkDiscoveryProvider.java
index 44dd60d..dba7add 100644
--- a/providers/link/src/main/java/org/onosproject/provider/linkdiscovery/impl/LinkDiscoveryProvider.java
+++ b/providers/link/src/main/java/org/onosproject/provider/linkdiscovery/impl/LinkDiscoveryProvider.java
@@ -58,8 +58,7 @@
 import static java.util.concurrent.TimeUnit.SECONDS;
 import static org.onlab.util.Tools.get;
 import static org.onlab.util.Tools.groupedThreads;
-import static org.onosproject.provider.linkdiscovery.impl.OsgiPropertyDefaults.POLL_DELAY_SECONDS_DEFAULT;
-import static org.onosproject.provider.linkdiscovery.impl.OsgiPropertyDefaults.POLL_FREQUENCY_SECONDS_DEFAULT;
+import static org.onosproject.provider.linkdiscovery.impl.OsgiPropertyConstants.*;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -68,8 +67,8 @@
  */
 @Component(immediate = true,
         property = {
-                "linkPollDelaySeconds:Integer=" + POLL_DELAY_SECONDS_DEFAULT,
-                "linkPollFrequencySeconds:Integer=" + POLL_FREQUENCY_SECONDS_DEFAULT,
+                POLL_DELAY_SECONDS + ":Integer=" + POLL_DELAY_SECONDS_DEFAULT,
+                POLL_FREQUENCY_SECONDS + ":Integer=" + POLL_FREQUENCY_SECONDS_DEFAULT,
         })
 public class LinkDiscoveryProvider extends AbstractProvider
         implements LinkProvider {
@@ -78,12 +77,11 @@
     protected static final String SCHEME_NAME = "linkdiscovery";
     private static final String LINK_PROVIDER_PACKAGE = "org.onosproject.provider.linkdiscovery";
     private final Logger log = getLogger(getClass());
-    //@Property(name = "linkPollDelaySeconds", intValue = DEFAULT_POLL_DELAY_SECONDS,
-    //        label = "Initial delay (in seconds) for polling link discovery")
+
+    /** Initial delay (in seconds) for polling link discovery. */
     protected static int linkPollDelaySeconds = POLL_DELAY_SECONDS_DEFAULT;
 
-    //@Property(name = "linkPollFrequencySeconds", intValue = DEFAULT_POLL_FREQUENCY_SECONDS,
-    //        label = "Frequency (in seconds) for polling link discovery")
+    /** Frequency (in seconds) for polling link discovery. */
     protected static int linkPollFrequencySeconds = POLL_FREQUENCY_SECONDS_DEFAULT;
 
 
@@ -171,7 +169,7 @@
     private int getNewPollFrequency(Dictionary<?, ?> properties, int pollFrequency) {
         int newPollFrequency;
         try {
-            String s = get(properties, "linkPollFrequencySeconds");
+            String s = get(properties, POLL_FREQUENCY_SECONDS);
             newPollFrequency = isNullOrEmpty(s) ? pollFrequency : Integer.parseInt(s.trim());
         } catch (NumberFormatException | ClassCastException e) {
             newPollFrequency = POLL_FREQUENCY_SECONDS_DEFAULT;
@@ -182,7 +180,7 @@
     private int getNewPollDealy(Dictionary<?, ?> properties, int pollDelay) {
         int newPollFrequency;
         try {
-            String s = get(properties, "linkPollDelaySeconds");
+            String s = get(properties, POLL_DELAY_SECONDS);
             newPollFrequency = isNullOrEmpty(s) ? pollDelay : Integer.parseInt(s.trim());
         } catch (NumberFormatException | ClassCastException e) {
             newPollFrequency = POLL_DELAY_SECONDS_DEFAULT;
diff --git a/providers/link/src/main/java/org/onosproject/provider/linkdiscovery/impl/OsgiPropertyDefaults.java b/providers/link/src/main/java/org/onosproject/provider/linkdiscovery/impl/OsgiPropertyConstants.java
similarity index 78%
rename from providers/link/src/main/java/org/onosproject/provider/linkdiscovery/impl/OsgiPropertyDefaults.java
rename to providers/link/src/main/java/org/onosproject/provider/linkdiscovery/impl/OsgiPropertyConstants.java
index ba85b86..4335fac 100644
--- a/providers/link/src/main/java/org/onosproject/provider/linkdiscovery/impl/OsgiPropertyDefaults.java
+++ b/providers/link/src/main/java/org/onosproject/provider/linkdiscovery/impl/OsgiPropertyConstants.java
@@ -19,11 +19,14 @@
 /**
  * Constants for default values of configurable properties.
  */
-public final class OsgiPropertyDefaults {
+public final class OsgiPropertyConstants {
 
-    private OsgiPropertyDefaults() {}
+    private OsgiPropertyConstants() {}
 
+    public static final String POLL_DELAY_SECONDS = "linkPollDelaySeconds";
     public static final int POLL_DELAY_SECONDS_DEFAULT = 20;
+
+    public static final String POLL_FREQUENCY_SECONDS = "linkPollFrequencySeconds";
     public static final int POLL_FREQUENCY_SECONDS_DEFAULT = 10;
 
 }
diff --git a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LldpLinkProvider.java b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LldpLinkProvider.java
index 2914965..6849119 100644
--- a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LldpLinkProvider.java
+++ b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LldpLinkProvider.java
@@ -155,28 +155,19 @@
     private static final long DEVICE_SYNC_DELAY = 5;
     private static final long LINK_PRUNER_DELAY = 3;
 
-    //@Property(name = PROP_ENABLED, boolValue = true,
-    //        label = "If false, link discovery is disabled")
     /** If false, link discovery is disabled. */
     protected boolean enabled = false;
 
-    //@Property(name = PROP_USE_BDDP, boolValue = true,
-    //        label = "Use BDDP for link discovery")
     /** Use BDDP for link discovery. */
     protected boolean useBddp = USE_BDDP_DEFAULT;
 
-    //@Property(name = PROP_PROBE_RATE, intValue = DEFAULT_PROBE_RATE,
-    //        label = "LLDP and BDDP probe rate specified in millis")
     /** LLDP and BDDP probe rate specified in millis. */
     protected int probeRate = PROBE_RATE_DEFAULT;
 
-    //@Property(name = PROP_STALE_LINK_AGE, intValue = DEFAULT_STALE_LINK_AGE,
-    //        label = "Number of millis beyond which links will be considered stale")
     /** Number of millis beyond which links will be considered stale. */
     protected int staleLinkAge = STALE_LINK_AGE_DEFAULT;
 
-    //@Property(name = PROP_DISCOVERY_DELAY, intValue = DEFAULT_DISCOVERY_DELAY,
-    //        label = "Number of millis beyond which an LLDP packet will not be accepted")
+    /** Number of millis beyond which an LLDP packet will not be accepted. */
     private int maxDiscoveryDelayMs = DISCOVERY_DELAY_DEFAULT;
 
     private final LinkDiscoveryContext context = new InternalDiscoveryContext();
diff --git a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/OsgiPropertyConstants.java b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/OsgiPropertyConstants.java
index e67f3d8..77e7167 100644
--- a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/OsgiPropertyConstants.java
+++ b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/OsgiPropertyConstants.java
@@ -35,7 +35,7 @@
     public static final String PROP_STALE_LINK_AGE = "staleLinkAge";
     public static final int STALE_LINK_AGE_DEFAULT = 10000;
 
-    public static final String PROP_DISCOVERY_DELAY = "maxLLDPAge";
+    public static final String PROP_DISCOVERY_DELAY = "maxDiscoveryDelayMs";
     public static final int DISCOVERY_DELAY_DEFAULT = 1000;
 
 }
diff --git a/providers/netcfglinks/src/main/java/org/onosproject/provider/netcfglinks/NetworkConfigLinksProvider.java b/providers/netcfglinks/src/main/java/org/onosproject/provider/netcfglinks/NetworkConfigLinksProvider.java
index 06de0f9..ac00cf8 100644
--- a/providers/netcfglinks/src/main/java/org/onosproject/provider/netcfglinks/NetworkConfigLinksProvider.java
+++ b/providers/netcfglinks/src/main/java/org/onosproject/provider/netcfglinks/NetworkConfigLinksProvider.java
@@ -108,12 +108,10 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected ClusterMetadataService metadataService;
 
-    //@Property(name = PROP_PROBE_RATE, intValue = DEFAULT_PROBE_RATE,
-    //        label = "LLDP and BDDP probe rate specified in millis")
+    /** LLDP and BDDP probe rate specified in millis. */
     private int probeRate = PROBE_RATE_DEFAULT;
 
-    //@Property(name = PROP_DISCOVERY_DELAY, intValue = DEFAULT_DISCOVERY_DELAY,
-    //        label = "Number of millis beyond which an LLDP packet will not be accepted")
+    /** Number of millis beyond which an LLDP packet will not be accepted. */
     private int maxDiscoveryDelayMs = DISCOVERY_DELAY_DEFAULT;
 
     // Device link discovery helpers.
diff --git a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
index 9987c6e..d9afbe3 100644
--- a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
+++ b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
@@ -145,14 +145,10 @@
     private static final String PORT = "port";
     private static final int CORE_POOL_SIZE = 10;
 
-    //@Property(name = "pollFrequency", intValue = DEFAULT_POLL_FREQUENCY_SECONDS,
-    //        label = "Configure poll frequency for port status and statistics; " +
-    //                "default is 30 sec")
+    /** Configure poll frequency for port status and statistics; default is 30 sec. */
     private int pollFrequency = POLL_FREQUENCY_SECONDS_DEFAULT;
 
-    //@Property(name = "maxRetries", intValue = DEFAULT_MAX_RETRIES,
-    //        label = "Configure maximum allowed number of retries for obtaining list of ports; " +
-    //                "default is 5 times")
+    /** Configure maximum allowed number of retries for obtaining list of ports; default is 5 times. */
     private int maxRetries = MAX_RETRIES_DEFAULT;
 
     protected ExecutorService executor =
diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/NullProviders.java b/providers/null/src/main/java/org/onosproject/provider/nil/NullProviders.java
index 1f21244..d95943b 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/NullProviders.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/NullProviders.java
@@ -64,7 +64,7 @@
 import static org.onosproject.net.DeviceId.deviceId;
 import static org.onosproject.net.MastershipRole.MASTER;
 import static org.onosproject.net.MastershipRole.NONE;
-import static org.onosproject.provider.nil.OsgiPropertyDefaults.*;
+import static org.onosproject.provider.nil.OsgiPropertyConstants.*;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -73,13 +73,13 @@
  */
 @Component(immediate = true, service = NullProviders.class,
         property = {
-            "enabled:Boolean=" + false,
-            "topoShape=" + TOPO_SHAPE_DEFAULT,
-            "deviceCount:Integer=" + DEVICE_COUNT_DEFAULT,
-            "hostCount:Integer=" +  HOST_COUNT_DEFAULT,
-            "packetRate:Integer=" +  PACKET_RATE_DEFAULT,
-            "mutationRate:Double=" + MUTATION_RATE_DEFAULT,
-            "mastership=" + MASTERSHIP_DEFAULT,
+            ENABLED + ":Boolean=" + ENABLED_DEFAULT,
+            TOPO_SHAPE + "=" + TOPO_SHAPE_DEFAULT,
+            DEVICE_COUNT + ":Integer=" + DEVICE_COUNT_DEFAULT,
+            HOST_COUNT + ":Integer=" +  HOST_COUNT_DEFAULT,
+            PACKET_RATE + ":Integer=" +  PACKET_RATE_DEFAULT,
+            MUTATION_RATE + ":Double=" + MUTATION_RATE_DEFAULT,
+            MASTERSHIP + "=" + MASTERSHIP_DEFAULT,
         })
 public class NullProviders {
 
@@ -110,7 +110,6 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected LinkService linkService;
 
-
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected DeviceProviderRegistry deviceProviderRegistry;
 
@@ -146,32 +145,25 @@
 
     private TopologySimulator simulator;
 
-    //@Property(name = "enabled", boolValue = false,
-    //        label = "Enables or disables the provider")
+    /** Enables or disables the provider. */
     private boolean enabled = false;
 
-    //@Property(name = "topoShape", value = DEFAULT_TOPO_SHAPE,
-    //        label = "Topology shape: configured, linear, reroute, tree, spineleaf, mesh, grid")
+    /** Topology shape: configured, linear, reroute, tree, spineleaf, mesh, grid. */
     private String topoShape = TOPO_SHAPE_DEFAULT;
 
-    //@Property(name = "deviceCount", intValue = DEFAULT_DEVICE_COUNT,
-    //        label = "Number of devices to generate")
+    /** Number of devices to generate. */
     private int deviceCount = DEVICE_COUNT_DEFAULT;
 
-    //@Property(name = "hostCount", intValue = DEFAULT_HOST_COUNT,
-    //        label = "Number of host to generate per device")
+    /** Number of host to generate per device. */
     private int hostCount = HOST_COUNT_DEFAULT;
 
-    //@Property(name = "packetRate", intValue = DEFAULT_PACKET_RATE,
-    //        label = "Packet-in/s rate; 0 for no packets")
+    /** Packet-in/s rate; 0 for no packets. */
     private int packetRate = PACKET_RATE_DEFAULT;
 
-    //@Property(name = "mutationRate", doubleValue = DEFAULT_MUTATION_RATE,
-    //        label = "Link event/s topology mutation rate; 0 for no mutations")
+    /** Link event/s topology mutation rate; 0 for no mutations. */
     private double mutationRate = MUTATION_RATE_DEFAULT;
 
-    //@Property(name = "mastership", value = DEFAULT_MASTERSHIP,
-    //        label = "Mastership given as 'random' or 'node1=dpid,dpid/node2=dpid,...'")
+    /** Mastership given as 'random' or 'node1=dpid,dpid/node2=dpid,...'. */
     private String mastership = MASTERSHIP_DEFAULT;
 
 
@@ -219,22 +211,22 @@
         double newMutationRate;
         String newTopoShape, newMastership;
         try {
-            String s = get(properties, "enabled");
+            String s = get(properties, ENABLED);
             newEnabled = isNullOrEmpty(s) ? enabled : Boolean.parseBoolean(s.trim());
 
-            newTopoShape = get(properties, "topoShape");
-            newMastership = get(properties, "mastership");
+            newTopoShape = get(properties, TOPO_SHAPE);
+            newMastership = get(properties, MASTERSHIP);
 
-            s = get(properties, "deviceCount");
+            s = get(properties, DEVICE_COUNT);
             newDeviceCount = isNullOrEmpty(s) ? deviceCount : Integer.parseInt(s.trim());
 
-            s = get(properties, "hostCount");
+            s = get(properties, HOST_COUNT);
             newHostCount = isNullOrEmpty(s) ? hostCount : Integer.parseInt(s.trim());
 
-            s = get(properties, "packetRate");
+            s = get(properties, PACKET_RATE);
             newPacketRate = isNullOrEmpty(s) ? packetRate : Integer.parseInt(s.trim());
 
-            s = get(properties, "mutationRate");
+            s = get(properties, MUTATION_RATE);
             newMutationRate = isNullOrEmpty(s) ? mutationRate : Double.parseDouble(s.trim());
 
         } catch (NumberFormatException e) {
diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/OsgiPropertyDefaults.java b/providers/null/src/main/java/org/onosproject/provider/nil/OsgiPropertyConstants.java
similarity index 66%
rename from providers/null/src/main/java/org/onosproject/provider/nil/OsgiPropertyDefaults.java
rename to providers/null/src/main/java/org/onosproject/provider/nil/OsgiPropertyConstants.java
index 2dd35e5..8cd6d8e 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/OsgiPropertyDefaults.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/OsgiPropertyConstants.java
@@ -19,15 +19,29 @@
 /**
  * Constants for default values of configurable properties.
  */
-public final class OsgiPropertyDefaults {
+public final class OsgiPropertyConstants {
 
-    private OsgiPropertyDefaults() {}
+    private OsgiPropertyConstants() {}
 
+    public static final String ENABLED = "enabled";
+    public static final boolean ENABLED_DEFAULT = false;
+
+    public static final String TOPO_SHAPE = "topoShape";
     public static final String TOPO_SHAPE_DEFAULT = "configured";
+
+    public static final String DEVICE_COUNT = "deviceCount";
     public static final int DEVICE_COUNT_DEFAULT = 10;
+
+    public static final String HOST_COUNT = "hostCount";
     public static final int HOST_COUNT_DEFAULT = 5;
+
+    public static final String PACKET_RATE = "packetRate";
     public static final int PACKET_RATE_DEFAULT = 0;
+
+    public static final String MUTATION_RATE = "mutationRate";
     public static final double MUTATION_RATE_DEFAULT = 0;
+
+    public static final String MASTERSHIP = "mastership";
     public static final String MASTERSHIP_DEFAULT = "random";
 
 }
diff --git a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
index 6117339..f849467 100644
--- a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
+++ b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
@@ -453,12 +453,10 @@
 
     private final InternalDeviceProvider listener = new InternalDeviceProvider();
 
-    //@Property(name = POLL_PROP_NAME, intValue = POLL_INTERVAL,
-    //label = "Frequency (in seconds) for polling switch Port statistics")
+    /** Frequency (in seconds) for polling switch Port statistics. */
     private int portStatsPollFrequency = POLL_FREQ_DEFAULT;
 
-    //@Property(name = PROP_FREQ, boolValue = DEFAULT_PROP_FREQ,
-    //label = "It indicates frequency must be used instead of wavelength for port tuning.")
+    /** It indicates frequency must be used instead of wavelength for port tuning. */
     private static boolean propFreq = PROP_FREQ_DEFAULT;
 
     private final Timer timer = new Timer("onos-openflow-portstats-collector");
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java
index 22b5246..d1867e2 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java
@@ -135,12 +135,10 @@
     private static final int MIN_EXPECTED_BYTE_LEN = 56;
     private static final int SKIP_BYTES = 4;
 
-    //@Property(name = "flowPollFrequency", intValue = DEFAULT_POLL_FREQUENCY,
-    //        label = "Frequency (in seconds) for polling flow statistics")
+    /** Frequency (in seconds) for polling flow statistics. */
     private int flowPollFrequency = POLL_FREQUENCY_DEFAULT;
 
-    //@Property(name = "adaptiveFlowSampling", boolValue = DEFAULT_ADAPTIVE_FLOW_SAMPLING,
-    //        label = "Adaptive Flow Sampling is on or off")
+    /** Adaptive Flow Sampling is on or off. */
     private boolean adaptiveFlowSampling = ADAPTIVE_FLOW_SAMPLING_DEFAULT;
 
     private FlowRuleProviderService providerService;
diff --git a/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java b/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java
index a74e2c7..433cfb6 100644
--- a/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java
+++ b/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java
@@ -121,8 +121,7 @@
 
     private static final String COMPONENT = "org.onosproject.provider.of.group.impl.OpenFlowGroupProvider";
 
-    //@Property(name = "groupPollInterval", intValue = DEFAULT_POLL_INTERVAL,
-    //        label = "Frequency (in seconds) for polling group statistics")
+    /** Frequency (in seconds) for polling group statistics. */
     private int groupPollInterval = POLL_FREQUENCY_DEFAULT;
 
     private final InternalGroupProvider listener = new InternalGroupProvider();
diff --git a/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java b/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java
index 04612c45..d25c95f 100644
--- a/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java
+++ b/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java
@@ -183,8 +183,7 @@
     private static final int WAIT_TIME = 5;
     public static final String LSRID = "lsrId";
 
-    //@Property(name = "tunnelStatsPollFrequency", intValue = POLL_INTERVAL,
-    //        label = "Frequency (in seconds) for polling tunnel statistics")
+    /** Frequency (in seconds) for polling tunnel statistics. */
     private int tunnelStatsPollFrequency = POLL_FREQUENCY_DEFAULT;
 
     private static final String TUNNLE_NOT_NULL = "Create failed,The given port may be wrong or has been occupied.";
diff --git a/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestDeviceProvider.java b/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestDeviceProvider.java
index 56afd93..a302203 100644
--- a/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestDeviceProvider.java
+++ b/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestDeviceProvider.java
@@ -137,9 +137,7 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected DriverService driverService;
 
-    //@Property(name = POLL_FREQUENCY, intValue = DEFAULT_POLL_FREQUENCY_SECONDS,
-    //        label = "Configure poll frequency for port status and statistics; " +
-    //                "default is 30 seconds")
+    /** Configure poll frequency for port status and statistics; default is 30 seconds. */
     private int pollFrequency = POLL_FREQUENCY_DEFAULT;
 
     private DeviceProviderService providerService;
