diff --git a/core/api/src/main/java/org/onosproject/cfg/package-info.java b/core/api/src/main/java/org/onosproject/cfg/package-info.java
index 7a8fae5..0f9bc00 100644
--- a/core/api/src/main/java/org/onosproject/cfg/package-info.java
+++ b/core/api/src/main/java/org/onosproject/cfg/package-info.java
@@ -18,7 +18,7 @@
  * Set of abstractions for centrally managing component configurations.
  * Configuration properties are registered for a component resource which is
  * auto-generated during the build process based on information specified in
- * the @Property annotations. This provides an overall inventory of all
- * supported component configurations.
+ * the @Component property annotations. This provides an overall inventory of
+ * all supported component configurations.
  */
 package org.onosproject.cfg;
\ No newline at end of file
diff --git a/core/common/src/test/java/org/onosproject/store/trivial/SimpleFlowRuleStore.java b/core/common/src/test/java/org/onosproject/store/trivial/SimpleFlowRuleStore.java
index b1eaae6..31b58fb 100644
--- a/core/common/src/test/java/org/onosproject/store/trivial/SimpleFlowRuleStore.java
+++ b/core/common/src/test/java/org/onosproject/store/trivial/SimpleFlowRuleStore.java
@@ -45,10 +45,6 @@
 import org.onosproject.net.flow.oldbatch.FlowRuleBatchRequest;
 import org.onosproject.store.AbstractStore;
 import org.osgi.service.component.ComponentContext;
-import org.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Deactivate;
-import org.osgi.service.component.annotations.Modified;
 import org.slf4j.Logger;
 
 import java.util.ArrayList;
@@ -69,14 +65,12 @@
 /**
  * Manages inventory of flow rules using trivial in-memory implementation.
  */
-@Component(immediate = true, service = FlowRuleStore.class)
 public class SimpleFlowRuleStore
         extends AbstractStore<FlowRuleBatchEvent, FlowRuleStoreDelegate>
         implements FlowRuleStore {
 
     private final Logger log = getLogger(getClass());
 
-
     // inner Map is Device flow table
     // inner Map value (FlowId synonym list) must be synchronized before modifying
     private final ConcurrentMap<DeviceId, ConcurrentMap<FlowId, List<StoredFlowEntry>>>
@@ -88,8 +82,6 @@
     private final AtomicInteger localBatchIdGen = new AtomicInteger();
 
     private static final int DEFAULT_PENDING_FUTURE_TIMEOUT_MINUTES = 5;
-    //@Property(name = "pendingFutureTimeoutMinutes", intValue = DEFAULT_PENDING_FUTURE_TIMEOUT_MINUTES,
-    //        label = "Expiration time after an entry is created that it should be automatically removed")
     private int pendingFutureTimeoutMinutes = DEFAULT_PENDING_FUTURE_TIMEOUT_MINUTES;
 
     private Cache<Integer, SettableFuture<CompletedBatchOperation>> pendingFutures =
@@ -98,21 +90,17 @@
                 .removalListener(new TimeoutFuture())
                 .build();
 
-    @Activate
     public void activate() {
         log.info("Started");
     }
 
-    @Deactivate
     public void deactivate() {
         deviceTableStats.clear();
         flowEntries.clear();
         log.info("Stopped");
     }
 
-    @Modified
     public void modified(ComponentContext context) {
-
         readComponentConfiguration(context);
 
         // Reset Cache and copy all.
diff --git a/core/net/src/main/java/org/onosproject/cluster/impl/MastershipManager.java b/core/net/src/main/java/org/onosproject/cluster/impl/MastershipManager.java
index 3e2f42a..442aaef 100644
--- a/core/net/src/main/java/org/onosproject/cluster/impl/MastershipManager.java
+++ b/core/net/src/main/java/org/onosproject/cluster/impl/MastershipManager.java
@@ -129,13 +129,10 @@
     private NodeId localNodeId;
     private Timer requestRoleTimer;
 
-    //@Property(name = "useRegionForBalanceRoles", boolValue = DEFAULT_USE_REGION_FOR_BALANCE_ROLES,
-    //        label = "Use Regions for balancing roles")
+    /** Use Regions for balancing roles. */
     protected boolean useRegionForBalanceRoles = USE_REGION_FOR_BALANCE_ROLES_DEFAULT;
 
-    //@Property(name = "rebalanceRolesOnUpgrade",
-    //        boolValue = DEFAULT_REBALANCE_ROLES_ON_UPGRADE,
-    //        label = "Automatically rebalance roles following an upgrade")
+    /** Automatically rebalance roles following an upgrade. */
     protected boolean rebalanceRolesOnUpgrade = REBALANCE_ROLES_ON_UPGRADE_DEFAULT;
 
     @Activate
@@ -156,8 +153,10 @@
         Set<ConfigProperty> configProperties = cfgService.getProperties(getClass().getCanonicalName());
         if (configProperties != null) {
             for (ConfigProperty property : configProperties) {
-                if ("useRegionForBalanceRoles".equals(property.name())) {
+                if (USE_REGION_FOR_BALANCE_ROLES.equals(property.name())) {
                     useRegionForBalanceRoles = property.asBoolean();
+                } else if (REBALANCE_ROLES_ON_UPGRADE.equals(property.name())) {
+                    rebalanceRolesOnUpgrade = property.asBoolean();
                 }
             }
         }
diff --git a/core/net/src/main/java/org/onosproject/core/impl/CoreManager.java b/core/net/src/main/java/org/onosproject/core/impl/CoreManager.java
index f53c9e8..f707c26 100644
--- a/core/net/src/main/java/org/onosproject/core/impl/CoreManager.java
+++ b/core/net/src/main/java/org/onosproject/core/impl/CoreManager.java
@@ -90,16 +90,13 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected MetricsService metricsService;
 
-    //@Property(name = "sharedThreadPoolSize", intValue = DEFAULT_POOL_SIZE,
-    //        label = "Configure shared pool maximum size ")
+    /** Configure shared pool maximum size. */
     private int sharedThreadPoolSize = SHARED_THREAD_POOL_SIZE_DEFAULT;
 
-    //@Property(name = "maxEventTimeLimit", intValue = DEFAULT_EVENT_TIME,
-    //        label = "Maximum number of millis an event sink has to process an event")
+    /** Maximum number of millis an event sink has to process an event. */
     private int maxEventTimeLimit = MAX_EVENT_TIME_LIMIT_DEFAULT;
 
-    //@Property(name = "sharedThreadPerformanceCheck", boolValue = DEFAULT_PERFORMANCE_CHECK,
-    //        label = "Enable queue performance check on shared pool")
+    /** Enable queue performance check on shared pool. */
     private boolean calculatePoolPerformance = CALCULATE_PERFORMANCE_CHECK_DEFAULT;
 
 
@@ -165,7 +162,7 @@
     @Modified
     protected void modified(ComponentContext context) {
         Dictionary<?, ?> properties = context.getProperties();
-        Integer poolSize = Tools.getIntegerProperty(properties, "sharedThreadPoolSize");
+        Integer poolSize = Tools.getIntegerProperty(properties, SHARED_THREAD_POOL_SIZE);
 
         if (poolSize != null && poolSize > 1) {
             sharedThreadPoolSize = poolSize;
@@ -174,7 +171,7 @@
             log.warn("sharedThreadPoolSize must be greater than 1");
         }
 
-        Integer timeLimit = Tools.getIntegerProperty(properties, "maxEventTimeLimit");
+        Integer timeLimit = Tools.getIntegerProperty(properties, MAX_EVENT_TIME_LIMIT);
         if (timeLimit != null && timeLimit >= 0) {
             maxEventTimeLimit = timeLimit;
             eventDeliveryService.setDispatchTimeLimit(maxEventTimeLimit);
@@ -182,7 +179,7 @@
             log.warn("maxEventTimeLimit must be greater than or equal to 0");
         }
 
-        Boolean performanceCheck = Tools.isPropertyEnabled(properties, "sharedThreadPerformanceCheck");
+        Boolean performanceCheck = Tools.isPropertyEnabled(properties, CALCULATE_PERFORMANCE_CHECK);
         if (performanceCheck != null) {
             calculatePoolPerformance = performanceCheck;
             SharedExecutors.setMetricsService(calculatePoolPerformance ? metricsService : null);
diff --git a/core/net/src/main/java/org/onosproject/net/OsgiPropertyConstants.java b/core/net/src/main/java/org/onosproject/net/OsgiPropertyConstants.java
index e40bcbe..dd96525 100644
--- a/core/net/src/main/java/org/onosproject/net/OsgiPropertyConstants.java
+++ b/core/net/src/main/java/org/onosproject/net/OsgiPropertyConstants.java
@@ -20,190 +20,108 @@
     private OsgiPropertyConstants() {
     }
 
-    //@Property(name = "useRegionForBalanceRoles", boolValue = DEFAULT_USE_REGION_FOR_BALANCE_ROLES,
-    //        label = "Use Regions for balancing roles")
     public static final String USE_REGION_FOR_BALANCE_ROLES = "useRegionForBalanceRoles";
     public static final boolean USE_REGION_FOR_BALANCE_ROLES_DEFAULT = false;
 
-    //@Property(name = "rebalanceRolesOnUpgrade",
-    //        boolValue = DEFAULT_REBALANCE_ROLES_ON_UPGRADE,
-    //        label = "Automatically rebalance roles following an upgrade")
     public static final String REBALANCE_ROLES_ON_UPGRADE = "rebalanceRolesOnUpgrade";
     public static final boolean REBALANCE_ROLES_ON_UPGRADE_DEFAULT = true;
 
-    //@Property(name = "sharedThreadPoolSize", intValue = DEFAULT_POOL_SIZE,
-    //        label = "Configure shared pool maximum size ")
     public static final String SHARED_THREAD_POOL_SIZE = "sharedThreadPoolSize";
     public static final int SHARED_THREAD_POOL_SIZE_DEFAULT = 30;
 
-    //@Property(name = "maxEventTimeLimit", intValue = DEFAULT_EVENT_TIME,
-    //        label = "Maximum number of millis an event sink has to process an event")
     public static final String MAX_EVENT_TIME_LIMIT = "maxEventTimeLimit";
     public static final int MAX_EVENT_TIME_LIMIT_DEFAULT = 2000;
 
-    //@Property(name = "sharedThreadPerformanceCheck", boolValue = DEFAULT_PERFORMANCE_CHECK,
-    //        label = "Enable queue performance check on shared pool")
-    public static final String CALCULATE_PERFORMANCE_CHECK = "calculatePoolPerformance";
+    public static final String CALCULATE_PERFORMANCE_CHECK = "sharedThreadPerformanceCheck";
     public static final boolean CALCULATE_PERFORMANCE_CHECK_DEFAULT = false;
 
-    //@Property(name = "allowExtraneousRules", boolValue = ALLOW_EXTRANEOUS_RULES,
-    //        label = "Allow flow rules in switch not installed by ONOS")
     public static final String ALLOW_EXTRANEOUS_RULES = "allowExtraneousRules";
     public static final boolean ALLOW_EXTRANEOUS_RULES_DEFAULT = false;
 
-    //@Property(name = "purgeOnDisconnection", boolValue = false,
-    //        label = "Purge entries associated with a device when the device goes offline")
     public static final String PURGE_ON_DISCONNECTION = "purgeOnDisconnection";
     public static final boolean PURGE_ON_DISCONNECTION_DEFAULT = false;
 
-    //@Property(name = "fallbackFlowPollFrequency", intValue = DEFAULT_POLL_FREQUENCY,
-    //        label = "Frequency (in seconds) for polling flow statistics via fallback provider")
     public static final String POLL_FREQUENCY = "fallbackFlowPollFrequency";
     public static final int POLL_FREQUENCY_DEFAULT = 30;
 
-    //@Property(name = NUM_THREAD,
-    //         intValue = DEFAULT_NUM_THREADS,
-    //         label = "Number of worker threads")
-    public static final String FOM_NUM_THREADS = "FOMNumThreads";
+    public static final String FOM_NUM_THREADS = "numThreads";
     public static final int FOM_NUM_THREADS_DEFAULT = 4;
 
-    //@Property(name = "fallbackGroupPollFrequency", intValue = DEFAULT_POLL_FREQUENCY,
-    //        label = "Frequency (in seconds) for polling groups via fallback provider")
     public static final String GM_POLL_FREQUENCY = "fallbackGroupPollFrequency";
     public static final int GM_POLL_FREQUENCY_DEFAULT = 30;
 
-    //@Property(name = "purgeOnDisconnection", boolValue = false,
-    //        label = "Purge entries associated with a device when the device goes offline")
     public static final String GM_PURGE_ON_DISCONNECTION = "purgeOnDisconnection";
     public static final boolean  GM_PURGE_ON_DISCONNECTION_DEFAULT = false;
 
-    //@Property(name = "allowDuplicateIps", boolValue = true,
-    //        label = "Enable removal of duplicate ip address")
     public static final String HM_ALLOW_DUPLICATE_IPS = "allowDuplicateIps";
     public static final boolean HM_ALLOW_DUPLICATE_IPS_DEFAULT = true;
 
-    //@Property(name = "monitorHosts", boolValue = false,
-    //        label = "Enable/Disable monitoring of hosts")
     public static final String HM_MONITOR_HOSTS = "monitorHosts";
     public static final boolean HM_MONITOR_HOSTS_DEFAULT = false;
 
-    //@Property(name = "probeRate", longValue = 30000,
-    //        label = "Set the probe Rate in milli seconds")
     public static final String HM_PROBE_RATE = "probeRate";
     public static final long HM_PROBE_RATE_DEFAULT = 30000;
 
-    //@Property(name = "greedyLearningIpv6", boolValue = false,
-    //        label = "Enable/Disable greedy learning of IPv6 link local address")
     public static final String HM_GREEDY_LEARNING_IPV6 = "greedyLearningIpv6";
     public static final boolean HM_GREEDY_LEARNING_IPV6_DEFAULT = false;
 
-    //@Property(name = "useFlowObjectives",
-    //        boolValue = DEFAULT_FLOW_OBJECTIVES,
-    //        label = "Indicates whether or not to use flow objective-based compilers")
     public static final String ICR_USE_FLOW_OBJECTIVES = "useFlowObjectives";
     public static final boolean ICR_USE_FLOW_OBJECTIVES_DEFAULT = false;
 
-    //@Property(name = "labelSelection",
-    //        value = DEFAULT_LABEL_SELECTION,
-    //        label = "Defines the label selection algorithm - RANDOM or FIRST_FIT")
     public static final String ICR_LABEL_SELECTION = "labelSelection";
     public static final String ICR_LABEL_SELECTION_DEFAULT = "RANDOM";
 
-    //@Property(name = "optLabelSelection",
-    //        value = DEFAULT_OPT_LABEL_SELECTION,
-    //        label = "Defines the optimization for label selection algorithm - NONE, NO_SWAP, MIN_SWAP")
     public static final String ICR_OPT_LABEL_SELECTION = "optLabelSelection";
     public static final String ICR_OPT_LABEL_SELECTION_DEFAULT = "NONE";
 
-    //@Property(name = "optimizeInstructions",
-    //        boolValue = DEFAULT_FLOW_OPTIMIZATION,
-    //        label = "Indicates whether or not to optimize the flows in the link collection compiler")
     public static final String ICR_FLOW_OPTIMIZATION = "optimizeInstructions";
     public static final boolean ICR_FLOW_OPTIMIZATION_DEFAULT = false;
 
-    //@Property(name = "useCopyTtl",
-    //        boolValue = DEFAULT_COPY_TTL,
-    //        label = "Indicates whether or not to use copy ttl in the link collection compiler")
     public static final String ICR_COPY_TTL = "useCopyTtl";
     public static final boolean ICR_COPY_TTL_DEFAULT = false;
 
-    //@Property(name = "enabled", boolValue = true,
-    //          label = "Enables/disables the intent cleanup component")
     public static final String ICU_ENABLED = "enabled";
     public static final boolean ICU_ENABLED_DEFAULT = true;
 
-    //@Property(name = "period", intValue = DEFAULT_PERIOD,
-    //          label = "Frequency in ms between cleanup runs")
     public static final String ICU_PERIOD = "period";
     public static final int ICU_PERIOD_DEFAULT = 5; //seconds
 
-    //@Property(name = "retryThreshold", intValue = DEFAULT_THRESHOLD,
-    //        label = "Number of times to retry CORRUPT intent without delay")
     public static final String ICU_RETRY_THRESHOLD = "retryThreshold";
     public static final int ICU_RETRY_THRESHOLD_DEFAULT = 5; //tries
 
-    //@Property(name = "nonDisruptiveInstallationWaitingTime",
-    //        intValue = DEFAULT_NON_DISRUPTIVE_INSTALLATION_WAITING_TIME,
-    //        label = "Number of seconds to wait during the non-disruptive installation phases")
-    public static final String NON_DISRUPTIVE_INSTALLATION_WAITING_TIME =
-        "nonDisruptiveInstallationWaitingTime";
+    public static final String NON_DISRUPTIVE_INSTALLATION_WAITING_TIME = "nonDisruptiveInstallationWaitingTime";
     public static final int NON_DISRUPTIVE_INSTALLATION_WAITING_TIME_DEFAULT = 1;
 
-    //@Property(name = "skipReleaseResourcesOnWithdrawal",
-    //        boolValue = DEFAULT_SKIP_RELEASE_RESOURCES_ON_WITHDRAWAL,
-    //        label = "Indicates whether skipping resource releases on withdrawal is enabled or not")
     public static final String IM_SKIP_RELEASE_RESOURCES_ON_WITHDRAWAL = "skipReleaseResourcesOnWithdrawal";
     public static final boolean IM_SKIP_RELEASE_RESOURCES_ON_WITHDRAWAL_DEFAULT = false;
 
-    //@Property(name = "numThreads",
-    //        intValue = DEFAULT_NUM_THREADS,
-    //        label = "Number of worker threads")
-    public static final String IM_NUM_THREADS = "IMNumThreads";
+    public static final String IM_NUM_THREADS = "numThreads";
     public static final int IM_NUM_THREADS_DEFAULT = 12;
 
-    //@Property(name = NUM_THREAD,
-    //        intValue = DEFAULT_NUM_THREADS,
-    //        label = "Number of worker threads")
-    public static final String MM_NUM_THREADS = "NMNumThreads";
+    public static final String MM_NUM_THREADS = "numThreads";
     public static final int MM_NUM_THREADS_DEFAULT = 12;
 
-    //@Property(name = "fallbackMeterPollFrequency", intValue = DEFAULT_POLL_FREQUENCY,
-    //        label = "Frequency (in seconds) for polling meters via fallback provider")
     public static final String MM_FALLBACK_METER_POLL_FREQUENCY = "fallbackMeterPollFrequency";
     public static final int MM_FALLBACK_METER_POLL_FREQUENCY_DEFAULT = 30;
 
-    //@Property(name = "arpEnabled", boolValue = true,
-    //        label = "Enable Address resolution protocol")
     public static final String NRM_ARP_ENABLED = "arpEnabled";
     public static final boolean NRM_ARP_ENABLED_DEFAULT = true;
 
-    //@Property(name = "ndpEnabled", boolValue = false,
-    //        label = "Enable IPv6 neighbour discovery")
     public static final String NRM_NDP_ENABLED = "ndpEnabled";
     public static final boolean NRM_NDP_ENABLED_DEFAULT = false;
 
-    //@Property(name = "requestInterceptsEnabled", boolValue = true,
-    //        label = "Enable requesting packet intercepts")
     public static final String NRM_REQUEST_INTERCEPTS_ENABLED = "requestInterceptsEnabled";
     public static final boolean NRM_REQUEST_INTERCEPTS_ENABLED_DEFAULT = true;
 
-    //@Property(name = PROBE_INTERVAL, intValue = DEFAULT_PROBE_INTERVAL,
-    //        label = "Configure interval in seconds for device pipeconf probing")
     public static final String PWM_PROBE_INTERVAL = "probeInterval";
     public static final int PWM_PROBE_INTERVAL_DEFAULT = 15;
 
-    //@Property(name = "maxEvents", intValue = DEFAULT_MAX_EVENTS,
-    //        label = "Maximum number of events to accumulate")
     public static final String DTP_MAX_EVENTS = "maxEvents";
     public static final int DTP_MAX_EVENTS_DEFAULT = 1000;
 
-    //@Property(name = "maxIdleMs", intValue = DEFAULT_MAX_IDLE_MS,
-    //        label = "Maximum number of millis between events")
     public static final String DTP_MAX_IDLE_MS = "maxIdleMs";
     public static final int DTP_MAX_IDLE_MS_DEFAULT = 10;
 
-    //@Property(name = "maxBatchMs", intValue = DEFAULT_MAX_BATCH_MS,
-    //        label = "Maximum number of millis for whole batch")
     public static final String DTP_MAX_BATCH_MS = "maxBatchMs";
     public static final int DTP_MAX_BATCH_MS_DEFAULT = 50;
 }
diff --git a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java
index 515291f..1af7c82 100644
--- a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java
+++ b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java
@@ -118,16 +118,13 @@
     private static final String DEVICE_ID_NULL = "Device ID cannot be null";
     private static final String FLOW_RULE_NULL = "FlowRule cannot be null";
 
-    //@Property(name = "allowExtraneousRules", boolValue = ALLOW_EXTRANEOUS_RULES,
-    //        label = "Allow flow rules in switch not installed by ONOS")
+    /** Allow flow rules in switch not installed by ONOS. */
     private boolean allowExtraneousRules = ALLOW_EXTRANEOUS_RULES_DEFAULT;
 
-    //@Property(name = "purgeOnDisconnection", boolValue = false,
-    //        label = "Purge entries associated with a device when the device goes offline")
+    /** Purge entries associated with a device when the device goes offline. */
     private boolean purgeOnDisconnection = PURGE_ON_DISCONNECTION_DEFAULT;
 
-    //@Property(name = "fallbackFlowPollFrequency", intValue = DEFAULT_POLL_FREQUENCY,
-    //        label = "Frequency (in seconds) for polling flow statistics via fallback provider")
+    /** Frequency (in seconds) for polling flow statistics via fallback provider. */
     private int fallbackFlowPollFrequency = POLL_FREQUENCY_DEFAULT;
 
     private final FlowRuleStoreDelegate delegate = new InternalStoreDelegate();
@@ -209,7 +206,7 @@
         Dictionary<?, ?> properties = context.getProperties();
         Boolean flag;
 
-        flag = Tools.isPropertyEnabled(properties, "allowExtraneousRules");
+        flag = Tools.isPropertyEnabled(properties, ALLOW_EXTRANEOUS_RULES);
         if (flag == null) {
             log.info("AllowExtraneousRules is not configured, " +
                     "using current value of {}", allowExtraneousRules);
@@ -219,7 +216,7 @@
                     allowExtraneousRules ? "enabled" : "disabled");
         }
 
-        flag = Tools.isPropertyEnabled(properties, "purgeOnDisconnection");
+        flag = Tools.isPropertyEnabled(properties, PURGE_ON_DISCONNECTION);
         if (flag == null) {
             log.info("PurgeOnDisconnection is not configured, " +
                     "using current value of {}", purgeOnDisconnection);
@@ -229,7 +226,7 @@
                     purgeOnDisconnection ? "enabled" : "disabled");
         }
 
-        String s = get(properties, "fallbackFlowPollFrequency");
+        String s = get(properties, POLL_FREQUENCY);
         if (isNullOrEmpty(s)) {
             log.info("fallbackFlowPollFrequency is not configured, " +
                              "using current value of {} seconds",
diff --git a/core/net/src/main/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManager.java b/core/net/src/main/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManager.java
index 39fe1d4..58cb215 100644
--- a/core/net/src/main/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManager.java
+++ b/core/net/src/main/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManager.java
@@ -98,9 +98,7 @@
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    //@Property(name = NUM_THREAD,
-    //         intValue = DEFAULT_NUM_THREADS,
-    //         label = "Number of worker threads")
+    /** Number of worker threads. */
     private int numThreads = FOM_NUM_THREADS_DEFAULT;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
diff --git a/core/net/src/main/java/org/onosproject/net/group/impl/GroupManager.java b/core/net/src/main/java/org/onosproject/net/group/impl/GroupManager.java
index ed01c24..8853585 100644
--- a/core/net/src/main/java/org/onosproject/net/group/impl/GroupManager.java
+++ b/core/net/src/main/java/org/onosproject/net/group/impl/GroupManager.java
@@ -59,10 +59,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.net.OsgiPropertyConstants.GM_POLL_FREQUENCY;
-import static org.onosproject.net.OsgiPropertyConstants.GM_POLL_FREQUENCY_DEFAULT;
-import static org.onosproject.net.OsgiPropertyConstants.GM_PURGE_ON_DISCONNECTION;
-import static org.onosproject.net.OsgiPropertyConstants.GM_PURGE_ON_DISCONNECTION_DEFAULT;
+import static org.onosproject.net.OsgiPropertyConstants.*;
 import static org.onosproject.security.AppGuard.checkPermission;
 import static org.onosproject.security.AppPermission.Type.GROUP_READ;
 import static org.onosproject.security.AppPermission.Type.GROUP_WRITE;
@@ -112,12 +109,10 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected MastershipService mastershipService;
 
-    //@Property(name = "fallbackGroupPollFrequency", intValue = DEFAULT_POLL_FREQUENCY,
-    //        label = "Frequency (in seconds) for polling groups via fallback provider")
+    /** Frequency (in seconds) for polling groups via fallback provider. */
     private int fallbackGroupPollFrequency = GM_POLL_FREQUENCY_DEFAULT;
 
-    //@Property(name = "purgeOnDisconnection", boolValue = false,
-    //        label = "Purge entries associated with a device when the device goes offline")
+    /** Purge entries associated with a device when the device goes offline. */
     private boolean purgeOnDisconnection = GM_PURGE_ON_DISCONNECTION_DEFAULT;
 
 
@@ -166,7 +161,7 @@
         Dictionary<?, ?> properties = context.getProperties();
         Boolean flag;
 
-        flag = Tools.isPropertyEnabled(properties, "purgeOnDisconnection");
+        flag = Tools.isPropertyEnabled(properties, GM_PURGE_ON_DISCONNECTION);
         if (flag == null) {
             log.info("PurgeOnDisconnection is not configured, " +
                     "using current value of {}", purgeOnDisconnection);
@@ -175,7 +170,7 @@
             log.info("Configured. PurgeOnDisconnection is {}",
                     purgeOnDisconnection ? "enabled" : "disabled");
         }
-        String s = get(properties, "fallbackGroupPollFrequency");
+        String s = get(properties, GM_POLL_FREQUENCY);
         try {
             fallbackGroupPollFrequency = isNullOrEmpty(s) ? GM_POLL_FREQUENCY_DEFAULT : Integer.parseInt(s);
         } catch (NumberFormatException e) {
diff --git a/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java b/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
index 13a13d7..1136951 100644
--- a/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
+++ b/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
@@ -125,20 +125,16 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected ComponentConfigService cfgService;
 
-    //@Property(name = "allowDuplicateIps", boolValue = true,
-    //        label = "Enable removal of duplicate ip address")
+    /** Enable removal of duplicate ip address. */
     private boolean allowDuplicateIps = HM_ALLOW_DUPLICATE_IPS_DEFAULT;
 
-    //@Property(name = "monitorHosts", boolValue = false,
-    //        label = "Enable/Disable monitoring of hosts")
+    /** Enable/Disable monitoring of hosts. */
     private boolean monitorHosts = HM_MONITOR_HOSTS_DEFAULT;
 
-    //@Property(name = "probeRate", longValue = 30000,
-    //        label = "Set the probe Rate in milli seconds")
+    /** Set the probe Rate in milli seconds. */
     private long probeRate = HM_PROBE_RATE_DEFAULT;
 
-    //@Property(name = "greedyLearningIpv6", boolValue = false,
-    //        label = "Enable/Disable greedy learning of IPv6 link local address")
+    /** Enable/Disable greedy learning of IPv6 link local address. */
     private boolean greedyLearningIpv6 = HM_GREEDY_LEARNING_IPV6_DEFAULT;
 
     private HostMonitor monitor;
@@ -175,7 +171,7 @@
         if (probeRate > 0) {
             monitor.setProbeRate(probeRate);
         } else {
-            log.warn("probeRate cannot be lessthan 0");
+            log.warn("ProbeRate cannot be less than 0");
         }
 
         if (oldValue != monitorHosts) {
@@ -196,7 +192,7 @@
         Dictionary<?, ?> properties = context.getProperties();
         Boolean flag;
 
-        flag = Tools.isPropertyEnabled(properties, "monitorHosts");
+        flag = Tools.isPropertyEnabled(properties, HM_MONITOR_HOSTS);
         if (flag == null) {
             log.info("monitorHosts is not enabled " +
                              "using current value of {}", monitorHosts);
@@ -206,7 +202,7 @@
                      monitorHosts ? "enabled" : "disabled");
         }
 
-        Long longValue = Tools.getLongProperty(properties, "probeRate");
+        Long longValue = Tools.getLongProperty(properties, HM_PROBE_RATE);
         if (longValue == null || longValue == 0) {
             log.info("probeRate is not set sing default value of {}", probeRate);
         } else {
@@ -214,7 +210,7 @@
             log.info("Configured. probeRate {}", probeRate);
         }
 
-        flag = Tools.isPropertyEnabled(properties, "allowDuplicateIps");
+        flag = Tools.isPropertyEnabled(properties, HM_ALLOW_DUPLICATE_IPS);
         if (flag == null) {
             log.info("Removal of duplicate ip address is not configured");
         } else {
@@ -223,7 +219,7 @@
                      allowDuplicateIps ? "disabled" : "enabled");
         }
 
-        flag = Tools.isPropertyEnabled(properties, "greedyLearningIpv6");
+        flag = Tools.isPropertyEnabled(properties, HM_GREEDY_LEARNING_IPV6);
         if (flag == null) {
             log.info("greedy learning is not enabled " +
                              "using current value of {}", greedyLearningIpv6);
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/IntentCleanup.java b/core/net/src/main/java/org/onosproject/net/intent/impl/IntentCleanup.java
index 37e6be8..d41439e 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/IntentCleanup.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/IntentCleanup.java
@@ -74,21 +74,16 @@
     // Logical timeout for stuck Intents in INSTALLING or WITHDRAWING. The unit is seconds
     private static final int INSTALLING_WITHDRAWING_PERIOD = 120;
 
-
-
-
-    //@Property(name = "enabled", boolValue = true,
-    //          label = "Enables/disables the intent cleanup component")
-    private boolean enabled = ICU_ENABLED_DEFAULT;
-
-    //@Property(name = "period", intValue = DEFAULT_PERIOD,
-    //          label = "Frequency in ms between cleanup runs")
-    protected int period = ICU_PERIOD_DEFAULT;
     private long periodMs;
     private long periodMsForStuck;
 
-    //@Property(name = "retryThreshold", intValue = DEFAULT_THRESHOLD,
-    //        label = "Number of times to retry CORRUPT intent without delay")
+    /** Enables/disables the intent cleanup component. */
+    private boolean enabled = ICU_ENABLED_DEFAULT;
+
+    /** Frequency in ms between cleanup runs. */
+    protected int period = ICU_PERIOD_DEFAULT;
+
+    /** Number of times to retry CORRUPT intent without delay. */
     protected int retryThreshold = ICU_RETRY_THRESHOLD_DEFAULT;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
@@ -131,13 +126,13 @@
         int newPeriod;
         boolean newEnabled;
         try {
-            String s = get(properties, "period");
+            String s = get(properties, ICU_PERIOD);
             newPeriod = isNullOrEmpty(s) ? period : Integer.parseInt(s.trim());
 
-            s = get(properties, "retryThreshold");
+            s = get(properties, ICU_RETRY_THRESHOLD);
             retryThreshold = isNullOrEmpty(s) ? retryThreshold : Integer.parseInt(s.trim());
 
-            s = get(properties, "enabled");
+            s = get(properties, ICU_ENABLED);
             newEnabled = isNullOrEmpty(s) ? enabled : Boolean.parseBoolean(s.trim());
         } catch (NumberFormatException e) {
             log.warn(e.getMessage());
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java b/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java
index 38d7a5b..2b83fa8 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java
@@ -120,14 +120,10 @@
     private static final EnumSet<IntentState> WITHDRAW
             = EnumSet.of(WITHDRAW_REQ, WITHDRAWING, WITHDRAWN);
 
-    //@Property(name = "skipReleaseResourcesOnWithdrawal",
-    //        boolValue = DEFAULT_SKIP_RELEASE_RESOURCES_ON_WITHDRAWAL,
-    //        label = "Indicates whether skipping resource releases on withdrawal is enabled or not")
+    /** Indicates whether skipping resource releases on withdrawal is enabled or not. */
     private boolean skipReleaseResourcesOnWithdrawal = IM_SKIP_RELEASE_RESOURCES_ON_WITHDRAWAL_DEFAULT;
 
-    //@Property(name = "numThreads",
-    //        intValue = DEFAULT_NUM_THREADS,
-    //        label = "Number of worker threads")
+    /** Number of worker threads. */
     private int numThreads = IM_NUM_THREADS_DEFAULT;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
@@ -218,7 +214,7 @@
             return;
         }
 
-        String s = Tools.get(context.getProperties(), "skipReleaseResourcesOnWithdrawal");
+        String s = Tools.get(context.getProperties(), IM_SKIP_RELEASE_RESOURCES_ON_WITHDRAWAL);
         boolean newTestEnabled = isNullOrEmpty(s) ? skipReleaseResourcesOnWithdrawal : Boolean.parseBoolean(s.trim());
         if (skipReleaseResourcesOnWithdrawal && !newTestEnabled) {
             store.unsetDelegate(testOnlyDelegate);
@@ -232,7 +228,7 @@
             logConfig("Reconfigured skip release resources on withdrawal");
         }
 
-        s = Tools.get(context.getProperties(), "numThreads");
+        s = Tools.get(context.getProperties(), IM_NUM_THREADS);
         int newNumThreads = isNullOrEmpty(s) ? numThreads : Integer.parseInt(s);
         if (newNumThreads != numThreads) {
             numThreads = newNumThreads;
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/IntentConfigurableRegistrator.java b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/IntentConfigurableRegistrator.java
index 14c2d83..97dd992 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/IntentConfigurableRegistrator.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/IntentConfigurableRegistrator.java
@@ -71,29 +71,19 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected ComponentConfigService cfgService;
 
-    //@Property(name = "useFlowObjectives",
-    //        boolValue = DEFAULT_FLOW_OBJECTIVES,
-    //        label = "Indicates whether or not to use flow objective-based compilers")
+    /** Indicates whether or not to use flow objective-based compilers. */
     private boolean useFlowObjectives = ICR_USE_FLOW_OBJECTIVES_DEFAULT;
 
-    //@Property(name = "labelSelection",
-    //        value = DEFAULT_LABEL_SELECTION,
-    //        label = "Defines the label selection algorithm - RANDOM or FIRST_FIT")
+    /** Defines the label selection algorithm - RANDOM or FIRST_FIT. */
     private String labelSelection = ICR_LABEL_SELECTION_DEFAULT;
 
-    //@Property(name = "optLabelSelection",
-    //        value = DEFAULT_OPT_LABEL_SELECTION,
-    //        label = "Defines the optimization for label selection algorithm - NONE, NO_SWAP, MIN_SWAP")
+    /** Defines the optimization for label selection algorithm - NONE, NO_SWAP, MIN_SWAP. */
     private String optLabelSelection = ICR_OPT_LABEL_SELECTION_DEFAULT;
 
-    //@Property(name = "optimizeInstructions",
-    //        boolValue = DEFAULT_FLOW_OPTIMIZATION,
-    //        label = "Indicates whether or not to optimize the flows in the link collection compiler")
+    /** Indicates whether or not to optimize the flows in the link collection compiler. */
     private boolean optimizeInstructions = ICR_FLOW_OPTIMIZATION_DEFAULT;
 
-    //@Property(name = "useCopyTtl",
-    //        boolValue = DEFAULT_COPY_TTL,
-    //        label = "Indicates whether or not to use copy ttl in the link collection compiler")
+    /** Indicates whether or not to use copy ttl in the link collection compiler. */
     private boolean useCopyTtl = ICR_COPY_TTL_DEFAULT;
 
     private final Map<Class<Intent>, IntentCompiler<Intent>> flowRuleBased = Maps.newConcurrentMap();
@@ -127,7 +117,7 @@
 
         boolean newFlowObjectives;
         try {
-            String s = Tools.get(context.getProperties(), "useFlowObjectives");
+            String s = Tools.get(context.getProperties(), ICR_USE_FLOW_OBJECTIVES);
             newFlowObjectives = isNullOrEmpty(s) ? useFlowObjectives : Boolean.parseBoolean(s.trim());
         } catch (ClassCastException e) {
             newFlowObjectives = useFlowObjectives;
@@ -141,7 +131,7 @@
 
         String newLabelSelection;
         try {
-            String s = Tools.get(context.getProperties(), "labelSelection");
+            String s = Tools.get(context.getProperties(), ICR_LABEL_SELECTION);
             newLabelSelection = isNullOrEmpty(s) ? labelSelection : s.trim();
         } catch (ClassCastException e) {
             newLabelSelection = labelSelection;
@@ -156,7 +146,7 @@
         String newOptLabelSelection;
         try {
             // The optimization behavior provided by the user
-            String optLabelSelected = Tools.get(context.getProperties(), "optLabelSelection");
+            String optLabelSelected = Tools.get(context.getProperties(), ICR_OPT_LABEL_SELECTION);
             // Parse the content of the string
             newOptLabelSelection = isNullOrEmpty(optLabelSelected) ? optLabelSelection : optLabelSelected.trim();
         } catch (ClassCastException e) {
@@ -171,7 +161,7 @@
 
         boolean newFlowOptimization;
         try {
-            String s = Tools.get(context.getProperties(), "useFlowOptimization");
+            String s = Tools.get(context.getProperties(), ICR_FLOW_OPTIMIZATION);
             newFlowOptimization = isNullOrEmpty(s) ? optimizeInstructions : Boolean.parseBoolean(s.trim());
         } catch (ClassCastException e) {
             newFlowOptimization = optimizeInstructions;
@@ -185,7 +175,7 @@
 
         boolean newCopyTtl;
         try {
-            String s = Tools.get(context.getProperties(), "useCopyTtl");
+            String s = Tools.get(context.getProperties(), ICR_COPY_TTL);
             newCopyTtl = isNullOrEmpty(s) ? useCopyTtl : Boolean.parseBoolean(s.trim());
         } catch (ClassCastException e) {
             newCopyTtl = useCopyTtl;
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/installer/FlowRuleIntentInstaller.java b/core/net/src/main/java/org/onosproject/net/intent/impl/installer/FlowRuleIntentInstaller.java
index 8f31d9a..b2cdf5a 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/installer/FlowRuleIntentInstaller.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/installer/FlowRuleIntentInstaller.java
@@ -100,9 +100,7 @@
 
     private ScheduledExecutorService nonDisruptiveIntentInstaller;
 
-    //@Property(name = "nonDisruptiveInstallationWaitingTime",
-    //        intValue = DEFAULT_NON_DISRUPTIVE_INSTALLATION_WAITING_TIME,
-    //        label = "Number of seconds to wait during the non-disruptive installation phases")
+    /** Number of seconds to wait during the non-disruptive installation phases. */
     private int nonDisruptiveInstallationWaitingTime = NON_DISRUPTIVE_INSTALLATION_WAITING_TIME_DEFAULT;
 
     protected final Logger log = getLogger(IntentManager.class);
@@ -134,7 +132,7 @@
             return;
         }
 
-        String s = Tools.get(context.getProperties(), "nonDisruptiveInstallationWaitingTime");
+        String s = Tools.get(context.getProperties(), NON_DISRUPTIVE_INSTALLATION_WAITING_TIME);
         int nonDisruptiveTime = isNullOrEmpty(s) ? nonDisruptiveInstallationWaitingTime : Integer.parseInt(s);
         if (nonDisruptiveTime != nonDisruptiveInstallationWaitingTime) {
             nonDisruptiveInstallationWaitingTime = nonDisruptiveTime;
diff --git a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java
index 716795b..a1ff4e5 100644
--- a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java
+++ b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java
@@ -86,16 +86,9 @@
         extends AbstractListenerProviderRegistry<MeterEvent, MeterListener, MeterProvider, MeterProviderService>
         implements MeterService, MeterProviderRegistry {
 
-    private static final String NUM_THREAD = "numThreads";
     private static final String WORKER_PATTERN = "installer-%d";
     private static final String GROUP_THREAD_NAME = "onos/meter";
 
-    private static final int DEFAULT_NUM_THREADS = 4;
-    //@Property(name = NUM_THREAD,
-    //        intValue = DEFAULT_NUM_THREADS,
-    //        label = "Number of worker threads")
-    private int numThreads = MM_NUM_THREADS_DEFAULT;
-
     private final Logger log = getLogger(getClass());
     private final MeterStoreDelegate delegate = new InternalMeterStoreDelegate();
 
@@ -114,8 +107,10 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected MastershipService mastershipService;
 
-    //@Property(name = "fallbackMeterPollFrequency", intValue = DEFAULT_POLL_FREQUENCY,
-    //        label = "Frequency (in seconds) for polling meters via fallback provider")
+    /** Number of worker threads. */
+    private int numThreads = MM_NUM_THREADS_DEFAULT;
+
+    /** Frequency (in seconds) for polling meters via fallback provider. */
     private int fallbackMeterPollFrequency = MM_FALLBACK_METER_POLL_FREQUENCY_DEFAULT;
 
     private TriConsumer<MeterRequest, MeterStoreResult, Throwable> onComplete;
@@ -145,9 +140,9 @@
 
         };
 
+        modified(context);
         executorService = newFixedThreadPool(numThreads,
                                              groupedThreads(GROUP_THREAD_NAME, WORKER_PATTERN, log));
-        modified(context);
         log.info("Started");
     }
 
@@ -178,13 +173,20 @@
     private void readComponentConfiguration(ComponentContext context) {
         Dictionary<?, ?> properties = context.getProperties();
 
-        String s = get(properties, "fallbackMeterPollFrequency");
+        String s = get(properties, MM_FALLBACK_METER_POLL_FREQUENCY);
         try {
             fallbackMeterPollFrequency = isNullOrEmpty(s) ?
                 MM_FALLBACK_METER_POLL_FREQUENCY_DEFAULT : Integer.parseInt(s);
         } catch (NumberFormatException e) {
             fallbackMeterPollFrequency = MM_FALLBACK_METER_POLL_FREQUENCY_DEFAULT;
         }
+
+        s = get(properties, MM_NUM_THREADS);
+        try {
+            numThreads = isNullOrEmpty(s) ? MM_NUM_THREADS_DEFAULT : Integer.parseInt(s);
+        } catch (NumberFormatException e) {
+            numThreads = MM_NUM_THREADS_DEFAULT;
+        }
     }
 
     @Override
diff --git a/core/net/src/main/java/org/onosproject/net/neighbour/impl/NeighbourResolutionManager.java b/core/net/src/main/java/org/onosproject/net/neighbour/impl/NeighbourResolutionManager.java
index dd9da4b..116b063 100644
--- a/core/net/src/main/java/org/onosproject/net/neighbour/impl/NeighbourResolutionManager.java
+++ b/core/net/src/main/java/org/onosproject/net/neighbour/impl/NeighbourResolutionManager.java
@@ -107,16 +107,13 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected ComponentConfigService componentConfigService;
 
-    //@Property(name = "arpEnabled", boolValue = true,
-    //        label = "Enable Address resolution protocol")
+    /** Enable Address resolution protocol. */
     protected boolean arpEnabled = NRM_ARP_ENABLED_DEFAULT;
 
-    //@Property(name = "ndpEnabled", boolValue = false,
-    //        label = "Enable IPv6 neighbour discovery")
+    /** Enable IPv6 neighbour discovery. */
     protected boolean ndpEnabled = NRM_NDP_ENABLED_DEFAULT;
 
-    //@Property(name = "requestInterceptsEnabled", boolValue = true,
-    //        label = "Enable requesting packet intercepts")
+    /** Enable requesting packet intercepts. */
     private boolean requestInterceptsEnabled = NRM_REQUEST_INTERCEPTS_ENABLED_DEFAULT;
 
     private static final String APP_NAME = "org.onosproject.neighbour";
@@ -152,21 +149,21 @@
         Dictionary<?, ?> properties = context.getProperties();
         Boolean flag;
 
-        flag = Tools.isPropertyEnabled(properties, "ndpEnabled");
+        flag = Tools.isPropertyEnabled(properties, NRM_NDP_ENABLED);
         if (flag != null) {
             ndpEnabled = flag;
             log.info("IPv6 neighbor discovery is {}",
                     ndpEnabled ? "enabled" : "disabled");
         }
 
-        flag = Tools.isPropertyEnabled(properties, "arpEnabled");
+        flag = Tools.isPropertyEnabled(properties, NRM_ARP_ENABLED);
         if (flag != null) {
             arpEnabled = flag;
             log.info("Address resolution protocol is {}",
                      arpEnabled ? "enabled" : "disabled");
         }
 
-        flag = Tools.isPropertyEnabled(properties, "requestInterceptsEnabled");
+        flag = Tools.isPropertyEnabled(properties, NRM_REQUEST_INTERCEPTS_ENABLED);
         if (flag == null) {
             log.info("Request intercepts is not configured, " +
                              "using current value of {}", requestInterceptsEnabled);
diff --git a/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfWatchdogManager.java b/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfWatchdogManager.java
index 04acc01..62fb157 100644
--- a/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfWatchdogManager.java
+++ b/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfWatchdogManager.java
@@ -112,8 +112,7 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     private ComponentConfigService componentConfigService;
 
-    //@Property(name = PROBE_INTERVAL, intValue = DEFAULT_PROBE_INTERVAL,
-    //        label = "Configure interval in seconds for device pipeconf probing")
+    /** Configure interval in seconds for device pipeconf probing. */
     private int probeInterval = PWM_PROBE_INTERVAL_DEFAULT;
 
     protected ExecutorService executor = Executors.newFixedThreadPool(
diff --git a/core/net/src/main/java/org/onosproject/net/topology/impl/DefaultTopologyProvider.java b/core/net/src/main/java/org/onosproject/net/topology/impl/DefaultTopologyProvider.java
index 1e1aa5a..5321a3e 100644
--- a/core/net/src/main/java/org/onosproject/net/topology/impl/DefaultTopologyProvider.java
+++ b/core/net/src/main/java/org/onosproject/net/topology/impl/DefaultTopologyProvider.java
@@ -86,16 +86,13 @@
     // TODO: Convert to use HashedWheelTimer or produce a variant of that; then decide which we want to adopt
     private static final Timer TIMER = new Timer("onos-topo-event-batching");
 
-    //@Property(name = "maxEvents", intValue = DEFAULT_MAX_EVENTS,
-    //        label = "Maximum number of events to accumulate")
+    /** Maximum number of events to accumulate. */
     private int maxEvents = DTP_MAX_EVENTS_DEFAULT;
 
-    //@Property(name = "maxIdleMs", intValue = DEFAULT_MAX_IDLE_MS,
-    //        label = "Maximum number of millis between events")
+    /** Maximum number of millis between events. */
     private int maxIdleMs = DTP_MAX_IDLE_MS_DEFAULT;
 
-    //@Property(name = "maxBatchMs", intValue = DEFAULT_MAX_BATCH_MS,
-    //        label = "Maximum number of millis for whole batch")
+    /** Maximum number of millis for whole batch. */
     private int maxBatchMs = DTP_MAX_BATCH_MS_DEFAULT;
 
     private final Logger log = getLogger(getClass());
@@ -173,13 +170,13 @@
         Dictionary<?, ?> properties = context.getProperties();
         int newMaxEvents, newMaxBatchMs, newMaxIdleMs;
         try {
-            String s = get(properties, "maxEvents");
+            String s = get(properties, DTP_MAX_EVENTS);
             newMaxEvents = isNullOrEmpty(s) ? maxEvents : Integer.parseInt(s.trim());
 
-            s = get(properties, "maxBatchMs");
+            s = get(properties, DTP_MAX_BATCH_MS);
             newMaxBatchMs = isNullOrEmpty(s) ? maxBatchMs : Integer.parseInt(s.trim());
 
-            s = get(properties, "maxIdleMs");
+            s = get(properties, DTP_MAX_IDLE_MS);
             newMaxIdleMs = isNullOrEmpty(s) ? maxIdleMs : Integer.parseInt(s.trim());
 
         } catch (NumberFormatException | ClassCastException e) {
diff --git a/core/store/dist/src/main/java/org/onosproject/store/OsgiPropertyConstants.java b/core/store/dist/src/main/java/org/onosproject/store/OsgiPropertyConstants.java
index 71f6f87..1f4555d 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/OsgiPropertyConstants.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/OsgiPropertyConstants.java
@@ -23,73 +23,45 @@
     private OsgiPropertyConstants() {
     }
 
-    //@Property(name = "msgHandlerPoolSize", intValue = MESSAGE_HANDLER_THREAD_POOL_SIZE,
-    //    label = "Number of threads in the message handler pool")
     public static final String MESSAGE_HANDLER_THREAD_POOL_SIZE = "msgHandlerPoolSize";
     public static final int MESSAGE_HANDLER_THREAD_POOL_SIZE_DEFAULT = 8;
 
-    //@Property(name = "backupPeriod", intValue = BACKUP_PERIOD_MILLIS,
-    //    label = "Delay in ms between successive backup runs")
     public static final String BACKUP_PERIOD_MILLIS = "backupPeriod";
     public static final int BACKUP_PERIOD_MILLIS_DEFAULT = 2000;
 
-    //@Property(name = "antiEntropyPeriod", intValue = ANTI_ENTROPY_PERIOD_MILLIS,
-    //    label = "Delay in ms between anti-entropy runs")
     public static final String ANTI_ENTROPY_PERIOD_MILLIS = "antiEntropyPeriod";
     public static final int ANTI_ENTROPY_PERIOD_MILLIS_DEFAULT = 5000;
 
-    //@Property(name = "persistenceEnabled", boolValue = false,
-    //    label = "Indicates whether or not changes in the flow table should be persisted to disk.")
-    public static final String EC_FLOW_RULE_STORE_PERSISTENCE_ENABLED = "ECFlowRuleStorePersistenceEnabled";
+    public static final String EC_FLOW_RULE_STORE_PERSISTENCE_ENABLED = "flowRuleStorePersistenceEnabled";
     public static final boolean EC_FLOW_RULE_STORE_PERSISTENCE_ENABLED_DEFAULT = false;
 
-    //@Property(name = "backupCount", intValue = DEFAULT_MAX_BACKUP_COUNT,
-    //    label = "Max number of backup copies for each device")
     public static final String MAX_BACKUP_COUNT = "backupCount";
     public static final int MAX_BACKUP_COUNT_DEFAULT = 2;
 
-    //@Property(name = "electionTimeoutMillis", longValue = DEFAULT_ELECTION_TIMEOUT_MILLIS,
-    //        label = "the leader election timeout in milliseconds")
     public static final String ELECTION_TIMEOUT_MILLIS = "electionTimeoutMillis";
     public static final long ELECTION_TIMEOUT_MILLIS_DEFAULT = 2500;
 
-    //@Property(name = "garbageCollect", boolValue = GARBAGE_COLLECT,
-    //        label = "Enable group garbage collection")
     public static final String GARBAGE_COLLECT = "garbageCollect";
     public static final boolean GARBAGE_COLLECT_DEFAULT = false;
 
-    //@Property(name = "gcThresh", intValue = GC_THRESH,
-    //        label = "Number of rounds for group garbage collection")
     public static final String GARBAGE_COLLECT_THRESH = "gcThresh";
     public static final int GARBAGE_COLLECT_THRESH_DEFAULT = 6;
 
-    //@Property(name = "allowExtraneousGroups", boolValue = ALLOW_EXTRANEOUS_GROUPS,
-    //        label = "Allow groups in switches not installed by ONOS")
-    public static final String ALLOW_EXTRANEOUS_GROUPS = "garbageCollect";
+    public static final String ALLOW_EXTRANEOUS_GROUPS = "allowExtraneousGroups";
     public static final boolean ALLOW_EXTRANEOUS_GROUPS_DEFAULT = false;
 
-    //@Property(name = "persistenceEnabled", boolValue = PERSIST,
-    //        label = "EXPERIMENTAL: Enable intent persistence")
-    public static final String GIS_PERSISTENCE_ENABLED = "GISPersistenceEnabled";
+    public static final String GIS_PERSISTENCE_ENABLED = "persistenceEnabled";
     public static final boolean GIS_PERSISTENCE_ENABLED_DEFAULT = false;
 
-    //@Property(name = "messageHandlerThreadPoolSize", intValue = DEFAULT_MESSAGE_HANDLER_THREAD_POOL_SIZE,
-    //        label = "Size of thread pool to assign message handler")
-    public static final String DPS_MESSAGE_HANDLER_THREAD_POOL_SIZE = "DPSMessageHandlerThreadPoolSize";
+    public static final String DPS_MESSAGE_HANDLER_THREAD_POOL_SIZE = "messageHandlerThreadPoolSize";
     public static final int DPS_MESSAGE_HANDLER_THREAD_POOL_SIZE_DEFAULT = 4;
 
-    //@Property(name = "messageHandlerThreadPoolSize", intValue = DEFAULT_MESSAGE_HANDLER_THREAD_POOL_SIZE,
-    //        label = "Size of thread pool to assign message handler")
-    public static final String DFS_MESSAGE_HANDLER_THREAD_POOL_SIZE = "DFSMessageHandlerThreadPoolSize";
+    public static final String DFS_MESSAGE_HANDLER_THREAD_POOL_SIZE = "messageHandlerThreadPoolSize";
     public static final int DFS_MESSAGE_HANDLER_THREAD_POOL_SIZE_DEFAULT = 4;
 
-    //@Property(name = "messageHandlerThreadPoolSize", intValue = DEFAULT_MESSAGE_HANDLER_THREAD_POOL_SIZE,
-    //        label = "Size of thread pool to assign message handler")
-    public static final String DSS_MESSAGE_HANDLER_THREAD_POOL_SIZE = "DFSMessageHandlerThreadPoolSize";
+    public static final String DSS_MESSAGE_HANDLER_THREAD_POOL_SIZE = "messageHandlerThreadPoolSize";
     public static final int DSS_MESSAGE_HANDLER_THREAD_POOL_SIZE_DEFAULT = 4;
 
-    //@Property(name = "linkWeightFunction", value = DEFAULT_LINK_WEIGHT_FUNCTION,
-    //        label = "Default link-weight function: hopCount, linkMetric, geoDistance")
     public static final String LINK_WEIGHT_FUNCTION = "linkWeightFunction";
     public static final String LINK_WEIGHT_FUNCTION_DEFAULT = "hopCount";
 }
diff --git a/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedLeadershipStore.java b/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedLeadershipStore.java
index 171e146..43959de 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedLeadershipStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/cluster/impl/DistributedLeadershipStore.java
@@ -90,8 +90,7 @@
     @Reference(cardinality = MANDATORY)
     protected UpgradeService upgradeService;
 
-    //@Property(name = "electionTimeoutMillis", longValue = DEFAULT_ELECTION_TIMEOUT_MILLIS,
-    //        label = "the leader election timeout in milliseconds")
+    /** Leader election timeout in milliseconds. */
     private long electionTimeoutMillis = ELECTION_TIMEOUT_MILLIS_DEFAULT;
 
     private ExecutorService statusChangeHandler;
@@ -192,7 +191,7 @@
         Dictionary<?, ?> properties = context.getProperties();
         long newElectionTimeoutMillis;
         try {
-            String s = get(properties, "electionTimeoutMillis");
+            String s = get(properties, ELECTION_TIMEOUT_MILLIS);
             newElectionTimeoutMillis = isNullOrEmpty(s) ? electionTimeoutMillis : Long.parseLong(s.trim());
         } catch (NumberFormatException | ClassCastException e) {
             log.warn("Malformed configuration detected; using defaults", e);
diff --git a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ECFlowRuleStore.java b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ECFlowRuleStore.java
index 50c68a2..dad9351 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ECFlowRuleStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/ECFlowRuleStore.java
@@ -129,24 +129,19 @@
 
     private static final long FLOW_RULE_STORE_TIMEOUT_MILLIS = 5000;
 
-    //@Property(name = "msgHandlerPoolSize", 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 msgHandlerPoolSize = 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 = "antiEntropyPeriod", intValue = ANTI_ENTROPY_PERIOD_MILLIS,
-    //    label = "Delay in ms between anti-entropy runs")
+    /** Delay in ms between anti-entropy runs. */
     private int antiEntropyPeriod = ANTI_ENTROPY_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 = EC_FLOW_RULE_STORE_PERSISTENCE_ENABLED_DEFAULT;
 
-    //@Property(name = "backupCount", intValue = DEFAULT_MAX_BACKUP_COUNT,
-    //    label = "Max number of backup copies for each device")
+    /** Max number of backup copies for each device. */
     private volatile int backupCount = MAX_BACKUP_COUNT_DEFAULT;
 
     private InternalFlowTable flowTable = new InternalFlowTable();
@@ -270,13 +265,13 @@
             String s = get(properties, "msgHandlerPoolSize");
             newPoolSize = isNullOrEmpty(s) ? msgHandlerPoolSize : Integer.parseInt(s.trim());
 
-            s = get(properties, "backupPeriod");
+            s = get(properties, BACKUP_PERIOD_MILLIS);
             newBackupPeriod = isNullOrEmpty(s) ? backupPeriod : Integer.parseInt(s.trim());
 
-            s = get(properties, "backupCount");
+            s = get(properties, MAX_BACKUP_COUNT);
             newBackupCount = isNullOrEmpty(s) ? backupCount : Integer.parseInt(s.trim());
 
-            s = get(properties, "antiEntropyPeriod");
+            s = get(properties, ANTI_ENTROPY_PERIOD_MILLIS);
             newAntiEntropyPeriod = isNullOrEmpty(s) ? antiEntropyPeriod : Integer.parseInt(s.trim());
         } catch (NumberFormatException | ClassCastException e) {
             newPoolSize = MESSAGE_HANDLER_THREAD_POOL_SIZE_DEFAULT;
diff --git a/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java b/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java
index 03f9e3f..23c1c9f 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java
@@ -170,16 +170,13 @@
 
     private static Topic<GroupStoreMessage> groupTopic;
 
-    //@Property(name = "garbageCollect", boolValue = GARBAGE_COLLECT,
-    //        label = "Enable group garbage collection")
+    /** Enable group garbage collection. */
     private boolean garbageCollect = GARBAGE_COLLECT_DEFAULT;
 
-    //@Property(name = "gcThresh", intValue = GC_THRESH,
-    //        label = "Number of rounds for group garbage collection")
+    /** Number of rounds for group garbage collection. */
     private int gcThresh = GARBAGE_COLLECT_THRESH_DEFAULT;
 
-    //@Property(name = "allowExtraneousGroups", boolValue = ALLOW_EXTRANEOUS_GROUPS,
-    //        label = "Allow groups in switches not installed by ONOS")
+    /** Allow groups in switches not installed by ONOS. */
     private boolean allowExtraneousGroups = ALLOW_EXTRANEOUS_GROUPS_DEFAULT;
 
     @Activate
@@ -269,13 +266,13 @@
         Dictionary<?, ?> properties = context != null ? context.getProperties() : new Properties();
 
         try {
-            String s = get(properties, "garbageCollect");
+            String s = get(properties, GARBAGE_COLLECT);
             garbageCollect = isNullOrEmpty(s) ? GARBAGE_COLLECT_DEFAULT : Boolean.parseBoolean(s.trim());
 
-            s = get(properties, "gcThresh");
+            s = get(properties, GARBAGE_COLLECT_THRESH);
             gcThresh = isNullOrEmpty(s) ? GARBAGE_COLLECT_THRESH_DEFAULT : Integer.parseInt(s.trim());
 
-            s = get(properties, "allowExtraneousGroups");
+            s = get(properties, ALLOW_EXTRANEOUS_GROUPS);
             allowExtraneousGroups = isNullOrEmpty(s) ? ALLOW_EXTRANEOUS_GROUPS_DEFAULT : Boolean.parseBoolean(s.trim());
         } catch (Exception e) {
             gcThresh = GARBAGE_COLLECT_THRESH_DEFAULT;
diff --git a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
index e2ec57f..bddb7a0 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
@@ -119,11 +119,11 @@
     private boolean initiallyPersistent = false;
 
     //TODO this is currently an experimental feature used for performance
-    // evalutaion, enabling persistence with persist the intents but they will
+    // evaluation, enabling persistence with persist the intents but they will
     // not be reinstalled and network state will not be consistent with the
     // intents on cluster restart
-    //@Property(name = "persistenceEnabled", boolValue = PERSIST,
-    //        label = "EXPERIMENTAL: Enable intent persistence")
+
+    /** EXPERIMENTAL: Enable intent persistence. */
     private boolean persistenceEnabled = GIS_PERSISTENCE_ENABLED_DEFAULT;
 
 
@@ -218,7 +218,7 @@
         Dictionary<?, ?> properties = context != null ? context.getProperties()
                 : new Properties();
         try {
-            String s = get(properties, "persistenceEnabled");
+            String s = get(properties, GIS_PERSISTENCE_ENABLED);
             persistenceEnabled =  isNullOrEmpty(s) ? PERSIST :
                     Boolean.parseBoolean(s.trim());
         } catch (Exception e) {
diff --git a/core/store/dist/src/main/java/org/onosproject/store/packet/impl/DistributedPacketStore.java b/core/store/dist/src/main/java/org/onosproject/store/packet/impl/DistributedPacketStore.java
index b5b489a..50e8900 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/packet/impl/DistributedPacketStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/packet/impl/DistributedPacketStore.java
@@ -106,8 +106,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 = DPS_MESSAGE_HANDLER_THREAD_POOL_SIZE_DEFAULT;
 
     private static final int MAX_BACKOFF = 50;
@@ -148,7 +147,7 @@
         int newMessageHandlerThreadPoolSize;
 
         try {
-            String s = get(properties, "messageHandlerThreadPoolSize");
+            String s = get(properties, DPS_MESSAGE_HANDLER_THREAD_POOL_SIZE);
 
             newMessageHandlerThreadPoolSize =
                     isNullOrEmpty(s) ? messageHandlerThreadPoolSize : Integer.parseInt(s.trim());
diff --git a/core/store/dist/src/main/java/org/onosproject/store/statistic/impl/DistributedFlowStatisticStore.java b/core/store/dist/src/main/java/org/onosproject/store/statistic/impl/DistributedFlowStatisticStore.java
index b430d37..a115995 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/statistic/impl/DistributedFlowStatisticStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/statistic/impl/DistributedFlowStatisticStore.java
@@ -106,8 +106,7 @@
     private NodeId local;
     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 = DFS_MESSAGE_HANDLER_THREAD_POOL_SIZE_DEFAULT;
 
 
@@ -152,7 +151,7 @@
         int newMessageHandlerThreadPoolSize;
 
         try {
-            String s = get(properties, "messageHandlerThreadPoolSize");
+            String s = get(properties, DFS_MESSAGE_HANDLER_THREAD_POOL_SIZE);
 
             newMessageHandlerThreadPoolSize =
                     isNullOrEmpty(s) ? messageHandlerThreadPoolSize : Integer.parseInt(s.trim());
diff --git a/core/store/dist/src/main/java/org/onosproject/store/statistic/impl/DistributedStatisticStore.java b/core/store/dist/src/main/java/org/onosproject/store/statistic/impl/DistributedStatisticStore.java
index 5e2f325..acf73fc 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/statistic/impl/DistributedStatisticStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/statistic/impl/DistributedStatisticStore.java
@@ -109,8 +109,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 = DSS_MESSAGE_HANDLER_THREAD_POOL_SIZE_DEFAULT;
 
     private static final long STATISTIC_STORE_TIMEOUT_MILLIS = 3000;
@@ -156,7 +155,7 @@
         int newMessageHandlerThreadPoolSize;
 
         try {
-            String s = get(properties, "messageHandlerThreadPoolSize");
+            String s = get(properties, DSS_MESSAGE_HANDLER_THREAD_POOL_SIZE);
 
             newMessageHandlerThreadPoolSize =
                     isNullOrEmpty(s) ? messageHandlerThreadPoolSize : Integer.parseInt(s.trim());
diff --git a/core/store/dist/src/main/java/org/onosproject/store/topology/impl/DistributedTopologyStore.java b/core/store/dist/src/main/java/org/onosproject/store/topology/impl/DistributedTopologyStore.java
index fee5d8d..0ea6845 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/topology/impl/DistributedTopologyStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/topology/impl/DistributedTopologyStore.java
@@ -125,8 +125,7 @@
     private static final String LINK_METRIC = "linkMetric";
     private static final String GEO_DISTANCE = "geoDistance";
 
-    //@Property(name = "linkWeightFunction", value = DEFAULT_LINK_WEIGHT_FUNCTION,
-    //        label = "Default link-weight function: hopCount, linkMetric, geoDistance")
+    /** Default link-weight function: hopCount, linkMetric, geoDistance. */
     private String linkWeightFunction = LINK_WEIGHT_FUNCTION_DEFAULT;
 
     // Cluster root to broadcast points bindings to allow convergence to
@@ -165,7 +164,7 @@
     protected void modified(ComponentContext context) {
         Dictionary<?, ?> properties = context.getProperties();
 
-        String newLinkWeightFunction = get(properties, "linkWeightFunction");
+        String newLinkWeightFunction = get(properties, LINK_WEIGHT_FUNCTION);
         if (newLinkWeightFunction != null &&
                 !Objects.equals(newLinkWeightFunction, linkWeightFunction)) {
             linkWeightFunction = newLinkWeightFunction;
