diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/GrpcTelemetryConfigManager.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/GrpcTelemetryConfigManager.java
index 97ddcb1..70b1d70 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/GrpcTelemetryConfigManager.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/GrpcTelemetryConfigManager.java
@@ -35,53 +35,57 @@
 
 import static org.onlab.util.Tools.get;
 import static org.onlab.util.Tools.getIntegerProperty;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_DISABLE;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_GRPC_MAX_INBOUND_MSG_SIZE;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_GRPC_SERVER_IP;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_GRPC_SERVER_PORT;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_GRPC_USE_PLAINTEXT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.GRPC_ENABLE_SERVICE_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.GRPC_MAX_INBOUND_MSG_SIZE_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.GRPC_SERVER_ADDRESS_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.GRPC_SERVER_PORT_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.GRPC_USE_PLAINTEXT_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_GRPC_ENABLE_SERVICE;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_GRPC_MAX_INBOUND_MSG_SIZE;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_GRPC_SERVER_ADDRESS;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_GRPC_SERVER_PORT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_GRPC_USE_PLAINTEXT;
 import static org.onosproject.openstacktelemetry.util.OpenstackTelemetryUtil.getBooleanProperty;
 import static org.onosproject.openstacktelemetry.util.OpenstackTelemetryUtil.initTelemetryService;
 
 /**
  * gRPC server configuration manager for publishing openstack telemetry.
  */
-@Component(immediate = true, service = GrpcTelemetryConfigService.class)
+@Component(
+    immediate = true,
+    service = GrpcTelemetryConfigService.class,
+    property = {
+        PROP_GRPC_ENABLE_SERVICE + ":Boolean=" + GRPC_ENABLE_SERVICE_DEFAULT,
+        PROP_GRPC_SERVER_ADDRESS  + "=" + GRPC_SERVER_ADDRESS_DEFAULT,
+        PROP_GRPC_SERVER_PORT + ":Integer=" + GRPC_SERVER_PORT_DEFAULT,
+        PROP_GRPC_USE_PLAINTEXT + ":Boolean=" + GRPC_USE_PLAINTEXT_DEFAULT,
+        PROP_GRPC_MAX_INBOUND_MSG_SIZE + ":Integer=" + GRPC_MAX_INBOUND_MSG_SIZE_DEFAULT
+    }
+)
 public class GrpcTelemetryConfigManager implements GrpcTelemetryConfigService {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    private static final String ENABLE_SERVICE = "enableService";
-    private static final String ADDRESS = "address";
-    private static final String PORT = "port";
-    private static final String USE_PLAINTEXT = "usePlaintext";
-    private static final String MAX_INBOUND_MSG_SIZE = "maxInboundMsgSize";
-
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected ComponentConfigService componentConfigService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected GrpcTelemetryAdminService grpcTelemetryAdminService;
 
-    //@Property(name = ADDRESS, value = DEFAULT_GRPC_SERVER_IP,
-    //        label = "Default IP address to establish initial connection to gRPC server")
-    protected String address = DEFAULT_GRPC_SERVER_IP;
+    /** Default IP address to establish initial connection to gRPC server. */
+    protected String address = GRPC_SERVER_ADDRESS_DEFAULT;
 
-    //@Property(name = PORT, intValue = DEFAULT_GRPC_SERVER_PORT,
-    //        label = "Default port number to establish initial connection to gRPC server")
-    protected Integer port = DEFAULT_GRPC_SERVER_PORT;
+    /** Default port number to establish initial connection to gRPC server. */
+    protected Integer port = GRPC_SERVER_PORT_DEFAULT;
 
-    //@Property(name = USE_PLAINTEXT, boolValue = DEFAULT_GRPC_USE_PLAINTEXT,
-    //        label = "UsePlaintext flag value used for connecting to gRPC server")
-    protected Boolean usePlaintext = DEFAULT_GRPC_USE_PLAINTEXT;
+    /** UsePlaintext flag value used for connecting to gRPC server. */
+    protected Boolean usePlaintext = GRPC_USE_PLAINTEXT_DEFAULT;
 
-    //@Property(name = MAX_INBOUND_MSG_SIZE, intValue = DEFAULT_GRPC_MAX_INBOUND_MSG_SIZE,
-    //        label = "Maximum inbound message size used for communicating with gRPC server")
-    protected Integer maxInboundMsgSize = DEFAULT_GRPC_MAX_INBOUND_MSG_SIZE;
+    /** Maximum inbound message size used for communicating with gRPC server. */
+    protected Integer maxInboundMsgSize = GRPC_MAX_INBOUND_MSG_SIZE_DEFAULT;
 
-    //@Property(name = ENABLE_SERVICE, boolValue = DEFAULT_DISABLE,
-    //        label = "Specify the default behavior of telemetry service")
-    protected Boolean enableService = DEFAULT_DISABLE;
+    /** Specify the default behavior of telemetry service. */
+    protected Boolean enableService = GRPC_ENABLE_SERVICE_DEFAULT;
 
     @Activate
     protected void activate(ComponentContext context) {
@@ -128,13 +132,13 @@
     private void readComponentConfiguration(ComponentContext context) {
         Dictionary<?, ?> properties = context.getProperties();
 
-        String addressStr = get(properties, ADDRESS);
-        address = addressStr != null ? addressStr : DEFAULT_GRPC_SERVER_IP;
+        String addressStr = get(properties, PROP_GRPC_SERVER_ADDRESS);
+        address = addressStr != null ? addressStr : GRPC_SERVER_ADDRESS_DEFAULT;
         log.info("Configured. gRPC server address is {}", address);
 
-        Integer portConfigured = Tools.getIntegerProperty(properties, PORT);
+        Integer portConfigured = Tools.getIntegerProperty(properties, PROP_GRPC_SERVER_PORT);
         if (portConfigured == null) {
-            port = DEFAULT_GRPC_SERVER_PORT;
+            port = GRPC_SERVER_PORT_DEFAULT;
             log.info("gRPC server port is NOT configured, default value is {}", port);
         } else {
             port = portConfigured;
@@ -142,9 +146,9 @@
         }
 
         Boolean usePlaintextConfigured =
-                getBooleanProperty(properties, USE_PLAINTEXT);
+                getBooleanProperty(properties, PROP_GRPC_USE_PLAINTEXT);
         if (usePlaintextConfigured == null) {
-            usePlaintext = DEFAULT_GRPC_USE_PLAINTEXT;
+            usePlaintext = GRPC_USE_PLAINTEXT_DEFAULT;
             log.info("gRPC server use plaintext flag is NOT " +
                     "configured, default value is {}", usePlaintext);
         } else {
@@ -153,9 +157,9 @@
         }
 
         Integer maxInboundMsgSizeConfigured =
-                getIntegerProperty(properties, MAX_INBOUND_MSG_SIZE);
+                getIntegerProperty(properties, PROP_GRPC_MAX_INBOUND_MSG_SIZE);
         if (maxInboundMsgSizeConfigured == null) {
-            maxInboundMsgSize = DEFAULT_GRPC_MAX_INBOUND_MSG_SIZE;
+            maxInboundMsgSize = GRPC_MAX_INBOUND_MSG_SIZE_DEFAULT;
             log.info("gRPC server max inbound message size is NOT " +
                     "configured, default value is {}", maxInboundMsgSize);
         } else {
@@ -164,9 +168,9 @@
         }
 
         Boolean enableServiceConfigured =
-                getBooleanProperty(properties, ENABLE_SERVICE);
+                getBooleanProperty(properties, PROP_GRPC_ENABLE_SERVICE);
         if (enableServiceConfigured == null) {
-            enableService = DEFAULT_DISABLE;
+            enableService = GRPC_ENABLE_SERVICE_DEFAULT;
             log.info("gRPC service enable flag is NOT " +
                     "configured, default value is {}", enableService);
         } else {
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/InfluxDbTelemetryConfigManager.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/InfluxDbTelemetryConfigManager.java
index e3db947..d9107ca 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/InfluxDbTelemetryConfigManager.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/InfluxDbTelemetryConfigManager.java
@@ -33,71 +33,75 @@
 
 import java.util.Dictionary;
 
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_DISABLE;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_INFLUXDB_DATABASE;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_INFLUXDB_ENABLE_BATCH;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_INFLUXDB_MEASUREMENT;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_INFLUXDB_PASSWORD;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_INFLUXDB_SERVER_IP;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_INFLUXDB_SERVER_PORT;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_INFLUXDB_USERNAME;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_INFLUXDB_DATABASE;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_INFLUXDB_DATABASE_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_INFLUXDB_ENABLE_BATCH;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_INFLUXDB_ENABLE_BATCH_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_INFLUXDB_ENABLE_SERVICE;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_INFLUXDB_ENABLE_SERVICE_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_INFLUXDB_MEASUREMENT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_INFLUXDB_MEASUREMENT_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_INFLUXDB_PASSWORD;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_INFLUXDB_PASSWORD_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_INFLUXDB_SERVER_ADDRESS;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_INFLUXDB_SERVER_ADDRESS_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_INFLUXDB_SERVER_PORT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_INFLUXDB_SERVER_PORT_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_INFLUXDB_USERNAME;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_INFLUXDB_USERNAME_DEFAULT;
 import static org.onosproject.openstacktelemetry.util.OpenstackTelemetryUtil.getBooleanProperty;
 import static org.onosproject.openstacktelemetry.util.OpenstackTelemetryUtil.initTelemetryService;
 
 /**
  * InfluxDB server configuration manager for publishing openstack telemetry.
  */
-@Component(immediate = true, service = InfluxDbTelemetryConfigService.class)
+@Component(
+    immediate = true,
+    service = InfluxDbTelemetryConfigService.class,
+    property = {
+        PROP_INFLUXDB_ENABLE_SERVICE + ":Boolean=" + PROP_INFLUXDB_ENABLE_SERVICE_DEFAULT,
+        PROP_INFLUXDB_SERVER_ADDRESS + "=" + PROP_INFLUXDB_SERVER_ADDRESS_DEFAULT,
+        PROP_INFLUXDB_SERVER_PORT + ":Integer=" + PROP_INFLUXDB_SERVER_PORT_DEFAULT,
+        PROP_INFLUXDB_USERNAME + "=" + PROP_INFLUXDB_USERNAME_DEFAULT,
+        PROP_INFLUXDB_PASSWORD + "=" + PROP_INFLUXDB_PASSWORD_DEFAULT,
+        PROP_INFLUXDB_DATABASE + "=" + PROP_INFLUXDB_DATABASE_DEFAULT,
+        PROP_INFLUXDB_MEASUREMENT + "=" + PROP_INFLUXDB_MEASUREMENT_DEFAULT,
+        PROP_INFLUXDB_ENABLE_BATCH + ":Boolean=" + PROP_INFLUXDB_ENABLE_BATCH_DEFAULT
+    }
+)
 public class InfluxDbTelemetryConfigManager implements InfluxDbTelemetryConfigService {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    private static final String ENABLE_SERVICE = "enableService";
-    private static final String ADDRESS = "address";
-    private static final String PORT = "port";
-    private static final String USERNAME = "username";
-    private static final String PASSWORD = "password";
-    private static final String DATABASE = "database";
-    private static final String MEASUREMENT = "measurement";
-    private static final String ENABLE_BATCH = "enableBatch";
-
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected ComponentConfigService componentConfigService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected InfluxDbTelemetryAdminService influxDbTelemetryAdminService;
 
-    //@Property(name = ADDRESS, value = DEFAULT_INFLUXDB_SERVER_IP,
-    //        label = "Default IP address to establish initial connection to InfluxDB server")
-    protected String address = DEFAULT_INFLUXDB_SERVER_IP;
+    /** Default IP address to establish initial connection to InfluxDB server. */
+    protected String address = PROP_INFLUXDB_SERVER_ADDRESS_DEFAULT;
 
-    //@Property(name = PORT, intValue = DEFAULT_INFLUXDB_SERVER_PORT,
-    //        label = "Default port number to establish initial connection to InfluxDB server")
-    protected Integer port = DEFAULT_INFLUXDB_SERVER_PORT;
+    /** Default port number to establish initial connection to InfluxDB server. */
+    protected Integer port = PROP_INFLUXDB_SERVER_PORT_DEFAULT;
 
-    //@Property(name = USERNAME, value = DEFAULT_INFLUXDB_USERNAME,
-    //        label = "Username used for authenticating against InfluxDB server")
-    protected String username = DEFAULT_INFLUXDB_USERNAME;
+    /** Username used for authenticating against InfluxDB server. */
+    protected String username = PROP_INFLUXDB_USERNAME_DEFAULT;
 
-    //@Property(name = PASSWORD, value = DEFAULT_INFLUXDB_PASSWORD,
-    //        label = "Password used for authenticating against InfluxDB server")
-    protected String password = DEFAULT_INFLUXDB_PASSWORD;
+    /** Password used for authenticating against InfluxDB server. */
+    protected String password = PROP_INFLUXDB_PASSWORD_DEFAULT;
 
-    //@Property(name = DATABASE, value = DEFAULT_INFLUXDB_DATABASE,
-    //        label = "Database of InfluxDB server")
-    protected String database = DEFAULT_INFLUXDB_DATABASE;
+    /** Database of InfluxDB server. */
+    protected String database = PROP_INFLUXDB_DATABASE_DEFAULT;
 
-    //@Property(name = MEASUREMENT, value = DEFAULT_INFLUXDB_MEASUREMENT,
-    //        label = "Measurement of InfluxDB server")
-    protected String measurement = DEFAULT_INFLUXDB_MEASUREMENT;
+    /** Measurement of InfluxDB server. */
+    protected String measurement = PROP_INFLUXDB_MEASUREMENT_DEFAULT;
 
-    //@Property(name = ENABLE_BATCH, boolValue = DEFAULT_INFLUXDB_ENABLE_BATCH,
-    //        label = "Flag value of enabling batch mode of InfluxDB server")
-    protected Boolean enableBatch = DEFAULT_INFLUXDB_ENABLE_BATCH;
+    /** Flag value of enabling batch mode of InfluxDB server. */
+    protected Boolean enableBatch = PROP_INFLUXDB_ENABLE_SERVICE_DEFAULT;
 
-    //@Property(name = ENABLE_SERVICE, boolValue = DEFAULT_DISABLE,
-    //        label = "Specify the default behavior of telemetry service")
-    protected Boolean enableService = DEFAULT_DISABLE;
+    /** Specify the default behavior of telemetry service. */
+    protected Boolean enableService = PROP_INFLUXDB_ENABLE_SERVICE_DEFAULT;
 
     @Activate
     protected void activate(ComponentContext context) {
@@ -147,38 +151,38 @@
     private void readComponentConfiguration(ComponentContext context) {
         Dictionary<?, ?> properties = context.getProperties();
 
-        String addressStr = Tools.get(properties, ADDRESS);
-        address = addressStr != null ? addressStr : DEFAULT_INFLUXDB_SERVER_IP;
+        String addressStr = Tools.get(properties, PROP_INFLUXDB_SERVER_ADDRESS);
+        address = addressStr != null ? addressStr : PROP_INFLUXDB_SERVER_ADDRESS_DEFAULT;
         log.info("Configured. InfluxDB server address is {}", address);
 
-        Integer portConfigured = Tools.getIntegerProperty(properties, PORT);
+        Integer portConfigured = Tools.getIntegerProperty(properties, PROP_INFLUXDB_SERVER_PORT);
         if (portConfigured == null) {
-            port = DEFAULT_INFLUXDB_SERVER_PORT;
+            port = PROP_INFLUXDB_SERVER_PORT_DEFAULT;
             log.info("InfluxDB server port is NOT configured, default value is {}", port);
         } else {
             port = portConfigured;
             log.info("Configured. InfluxDB server port is {}", port);
         }
 
-        String usernameStr = Tools.get(properties, USERNAME);
-        username = usernameStr != null ? usernameStr : DEFAULT_INFLUXDB_USERNAME;
+        String usernameStr = Tools.get(properties, PROP_INFLUXDB_USERNAME);
+        username = usernameStr != null ? usernameStr : PROP_INFLUXDB_USERNAME_DEFAULT;
         log.info("Configured. InfluxDB server username is {}", username);
 
-        String passwordStr = Tools.get(properties, PASSWORD);
-        password = passwordStr != null ? passwordStr : DEFAULT_INFLUXDB_PASSWORD;
+        String passwordStr = Tools.get(properties, PROP_INFLUXDB_PASSWORD);
+        password = passwordStr != null ? passwordStr : PROP_INFLUXDB_PASSWORD_DEFAULT;
         log.info("Configured. InfluxDB server password is {}", password);
 
-        String databaseStr = Tools.get(properties, DATABASE);
-        database = databaseStr != null ? databaseStr : DEFAULT_INFLUXDB_DATABASE;
+        String databaseStr = Tools.get(properties, PROP_INFLUXDB_DATABASE);
+        database = databaseStr != null ? databaseStr : PROP_INFLUXDB_DATABASE_DEFAULT;
         log.info("Configured. InfluxDB server database is {}", database);
 
-        String measurementStr = Tools.get(properties, MEASUREMENT);
-        measurement = measurementStr != null ? measurementStr : DEFAULT_INFLUXDB_MEASUREMENT;
+        String measurementStr = Tools.get(properties, PROP_INFLUXDB_MEASUREMENT);
+        measurement = measurementStr != null ? measurementStr : PROP_INFLUXDB_MEASUREMENT_DEFAULT;
         log.info("Configured. InfluxDB server measurement is {}", measurement);
 
-        Boolean enableBatchConfigured = getBooleanProperty(properties, ENABLE_BATCH);
+        Boolean enableBatchConfigured = getBooleanProperty(properties, PROP_INFLUXDB_ENABLE_BATCH);
         if (enableBatchConfigured == null) {
-            enableBatch = DEFAULT_INFLUXDB_ENABLE_BATCH;
+            enableBatch = PROP_INFLUXDB_ENABLE_BATCH_DEFAULT;
             log.info("InfluxDB server enable batch flag is " +
                     "NOT configured, default value is {}", enableBatch);
         } else {
@@ -187,9 +191,9 @@
         }
 
         Boolean enableServiceConfigured =
-                getBooleanProperty(properties, ENABLE_SERVICE);
+                getBooleanProperty(properties, PROP_INFLUXDB_ENABLE_SERVICE);
         if (enableServiceConfigured == null) {
-            enableService = DEFAULT_DISABLE;
+            enableService = PROP_INFLUXDB_ENABLE_SERVICE_DEFAULT;
             log.info("InfluxDB service enable flag is NOT " +
                     "configured, default value is {}", enableService);
         } else {
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/KafkaTelemetryConfigManager.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/KafkaTelemetryConfigManager.java
index 1212b0b..6621e0b 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/KafkaTelemetryConfigManager.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/KafkaTelemetryConfigManager.java
@@ -33,84 +33,87 @@
 
 import java.util.Dictionary;
 
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_DISABLE;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_KAFKA_BATCH_SIZE;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_KAFKA_KEY_SERIALIZER;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_KAFKA_LINGER_MS;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_KAFKA_MEMORY_BUFFER;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_KAFKA_REQUIRED_ACKS;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_KAFKA_RETRIES;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_KAFKA_SERVER_IP;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_KAFKA_SERVER_PORT;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_KAFKA_VALUE_SERIALIZER;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_ADDRESS;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_ADDRESS_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_BATCH_SIZE;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_BATCH_SIZE_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_ENABLE_SERVICE;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_ENABLE_SERVICE_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_KEY_SERIALIZER;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_KEY_SERIALIZER_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_LINGER_MS;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_LINGER_MS_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_MEMORY_BUFFER;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_MEMORY_BUFFER_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_PORT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_PORT_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_REQUIRED_ACKS;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_REQUIRED_ACKS_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_RETRIES;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_RETRIES_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_VALUE_SERIALIZER;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_KAFKA_VALUE_SERIALIZER_DEFAULT;
 import static org.onosproject.openstacktelemetry.util.OpenstackTelemetryUtil.getBooleanProperty;
 import static org.onosproject.openstacktelemetry.util.OpenstackTelemetryUtil.initTelemetryService;
 
 /**
  * Kafka server configuration manager for publishing openstack telemetry.
  */
-@Component(immediate = true, service = KafkaTelemetryConfigService.class)
+@Component(
+    immediate = true,
+    service = KafkaTelemetryConfigService.class,
+    property = {
+        PROP_KAFKA_ADDRESS + "=" + PROP_KAFKA_ADDRESS_DEFAULT,
+        PROP_KAFKA_PORT + ":Integer=" + PROP_KAFKA_PORT_DEFAULT,
+        PROP_KAFKA_RETRIES + ":Integer=" + PROP_KAFKA_RETRIES_DEFAULT,
+        PROP_KAFKA_REQUIRED_ACKS + "=" + PROP_KAFKA_REQUIRED_ACKS_DEFAULT,
+        PROP_KAFKA_BATCH_SIZE + ":Integer=" + PROP_KAFKA_BATCH_SIZE_DEFAULT,
+        PROP_KAFKA_LINGER_MS + ":Integer=" + PROP_KAFKA_LINGER_MS_DEFAULT,
+        PROP_KAFKA_MEMORY_BUFFER + ":Integer=" + PROP_KAFKA_MEMORY_BUFFER_DEFAULT,
+        PROP_KAFKA_KEY_SERIALIZER + "=" + PROP_KAFKA_KEY_SERIALIZER_DEFAULT,
+        PROP_KAFKA_VALUE_SERIALIZER + "=" + PROP_KAFKA_VALUE_SERIALIZER_DEFAULT,
+        PROP_KAFKA_ENABLE_SERVICE + ":Boolean=" + PROP_KAFKA_ENABLE_SERVICE_DEFAULT
+    }
+)
 public class KafkaTelemetryConfigManager implements KafkaTelemetryConfigService {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    private static final String ENABLE_SERVICE = "enableService";
-    private static final String ADDRESS = "address";
-    private static final String PORT = "port";
-    private static final String RETRIES = "retries";
-    private static final String REQUIRED_ACKS = "requiredAcks";
-    private static final String BATCH_SIZE = "batchSize";
-    private static final String LINGER_MS = "lingerMs";
-    private static final String MEMORY_BUFFER = "memoryBuffer";
-    private static final String KEY_SERIALIZER = "keySerializer";
-    private static final String VALUE_SERIALIZER = "valueSerializer";
-
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected ComponentConfigService componentConfigService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected KafkaTelemetryAdminService kafkaTelemetryAdminService;
 
-    //@Property(name = ADDRESS, value = DEFAULT_KAFKA_SERVER_IP,
-    //        label = "Default IP address to establish initial connection to Kafka server")
-    protected String address = DEFAULT_KAFKA_SERVER_IP;
+    /** Default IP address to establish initial connection to Kafka server. */
+    protected String address = PROP_KAFKA_ADDRESS_DEFAULT;
 
-    //@Property(name = PORT, intValue = DEFAULT_KAFKA_SERVER_PORT,
-    //        label = "Default port number to establish initial connection to Kafka server")
-    protected Integer port = DEFAULT_KAFKA_SERVER_PORT;
+    /** Default port number to establish initial connection to Kafka server. */
+    protected Integer port = PROP_KAFKA_PORT_DEFAULT;
 
-    //@Property(name = RETRIES, intValue = DEFAULT_KAFKA_RETRIES,
-    //        label = "Number of times the producer can retry to send after first failure")
-    protected int retries = DEFAULT_KAFKA_RETRIES;
+    /** Number of times the producer can retry to send after first failure. */
+    protected int retries = PROP_KAFKA_RETRIES_DEFAULT;
 
-    //@Property(name = REQUIRED_ACKS, value = DEFAULT_KAFKA_REQUIRED_ACKS,
-    //        label = "Producer will get an acknowledgement after the leader has replicated the data")
-    protected String requiredAcks = DEFAULT_KAFKA_REQUIRED_ACKS;
+    /** Producer will get an acknowledgement after the leader has replicated the data. */
+    protected String requiredAcks = PROP_KAFKA_REQUIRED_ACKS_DEFAULT;
 
-    //@Property(name = BATCH_SIZE, intValue = DEFAULT_KAFKA_BATCH_SIZE,
-    //        label = "The largest record batch size allowed by Kafka")
-    protected Integer batchSize = DEFAULT_KAFKA_BATCH_SIZE;
+    /** The largest record batch size allowed by Kafka. */
+    protected Integer batchSize = PROP_KAFKA_BATCH_SIZE_DEFAULT;
 
-    //@Property(name = LINGER_MS, intValue = DEFAULT_KAFKA_LINGER_MS,
-    //        label = "The producer groups together any records that arrive in " +
-    //                "between request transmissions into a single batched request")
-    protected Integer lingerMs = DEFAULT_KAFKA_LINGER_MS;
+    /** The producer groups together any records that arrive between request transmissions into a single batch. */
+    protected Integer lingerMs = PROP_KAFKA_LINGER_MS_DEFAULT;
 
-    //@Property(name = MEMORY_BUFFER, intValue = DEFAULT_KAFKA_MEMORY_BUFFER,
-    //        label = "The total memory used for log cleaner I/O buffers across all cleaner threads")
-    protected Integer memoryBuffer = DEFAULT_KAFKA_MEMORY_BUFFER;
+    /** The total memory used for log cleaner I/O buffers across all cleaner threads. */
+    protected Integer memoryBuffer = PROP_KAFKA_MEMORY_BUFFER_DEFAULT;
 
-    //@Property(name = KEY_SERIALIZER, value = DEFAULT_KAFKA_KEY_SERIALIZER,
-    //        label = "Serializer class for key that implements the Serializer interface")
-    protected String keySerializer = DEFAULT_KAFKA_KEY_SERIALIZER;
+    /** Serializer class for key that implements the Serializer interface. */
+    protected String keySerializer = PROP_KAFKA_KEY_SERIALIZER_DEFAULT;
 
-    //@Property(name = VALUE_SERIALIZER, value = DEFAULT_KAFKA_VALUE_SERIALIZER,
-    //        label = "Serializer class for value that implements the Serializer interface")
-    protected String valueSerializer = DEFAULT_KAFKA_VALUE_SERIALIZER;
+    /** Serializer class for value that implements the Serializer interface. */
+    protected String valueSerializer = PROP_KAFKA_VALUE_SERIALIZER_DEFAULT;
 
-    //@Property(name = ENABLE_SERVICE, boolValue = DEFAULT_DISABLE,
-    //        label = "Specify the default behavior of telemetry service")
-    protected Boolean enableService = DEFAULT_DISABLE;
+    /** Specify the default behavior of telemetry service. */
+    protected Boolean enableService = PROP_KAFKA_ENABLE_SERVICE_DEFAULT;
 
     @Activate
     protected void activate(ComponentContext context) {
@@ -162,71 +165,71 @@
     private void readComponentConfiguration(ComponentContext context) {
         Dictionary<?, ?> properties = context.getProperties();
 
-        String addressStr = Tools.get(properties, ADDRESS);
-        address = addressStr != null ? addressStr : DEFAULT_KAFKA_SERVER_IP;
+        String addressStr = Tools.get(properties, PROP_KAFKA_ADDRESS);
+        address = addressStr != null ? addressStr : PROP_KAFKA_ADDRESS_DEFAULT;
         log.info("Configured. Kafka server address is {}", address);
 
-        Integer portConfigured = Tools.getIntegerProperty(properties, PORT);
+        Integer portConfigured = Tools.getIntegerProperty(properties, PROP_KAFKA_PORT);
         if (portConfigured == null) {
-            port = DEFAULT_KAFKA_SERVER_PORT;
+            port = PROP_KAFKA_PORT_DEFAULT;
             log.info("Kafka server port is NOT configured, default value is {}", port);
         } else {
             port = portConfigured;
             log.info("Configured. Kafka server port is {}", port);
         }
 
-        Integer retriesConfigured = Tools.getIntegerProperty(properties, RETRIES);
+        Integer retriesConfigured = Tools.getIntegerProperty(properties, PROP_KAFKA_RETRIES);
         if (retriesConfigured == null) {
-            retries = DEFAULT_KAFKA_RETRIES;
+            retries = PROP_KAFKA_RETRIES_DEFAULT;
             log.info("Kafka number of retries property is NOT configured, default value is {}", retries);
         } else {
             retries = retriesConfigured;
             log.info("Configured. Kafka number of retries is {}", retries);
         }
 
-        String requiredAcksStr = Tools.get(properties, REQUIRED_ACKS);
-        requiredAcks = requiredAcksStr != null ? requiredAcksStr : DEFAULT_KAFKA_REQUIRED_ACKS;
+        String requiredAcksStr = Tools.get(properties, PROP_KAFKA_REQUIRED_ACKS);
+        requiredAcks = requiredAcksStr != null ? requiredAcksStr : PROP_KAFKA_REQUIRED_ACKS_DEFAULT;
         log.info("Configured, Kafka required acknowledgement is {}", requiredAcks);
 
-        Integer batchSizeConfigured = Tools.getIntegerProperty(properties, BATCH_SIZE);
+        Integer batchSizeConfigured = Tools.getIntegerProperty(properties, PROP_KAFKA_BATCH_SIZE);
         if (batchSizeConfigured == null) {
-            batchSize = DEFAULT_KAFKA_BATCH_SIZE;
+            batchSize = PROP_KAFKA_BATCH_SIZE_DEFAULT;
             log.info("Kafka batch size property is NOT configured, default value is {}", batchSize);
         } else {
             batchSize = batchSizeConfigured;
             log.info("Configured. Kafka batch size is {}", batchSize);
         }
 
-        Integer lingerMsConfigured = Tools.getIntegerProperty(properties, LINGER_MS);
+        Integer lingerMsConfigured = Tools.getIntegerProperty(properties, PROP_KAFKA_LINGER_MS);
         if (lingerMsConfigured == null) {
-            lingerMs = DEFAULT_KAFKA_LINGER_MS;
+            lingerMs = PROP_KAFKA_LINGER_MS_DEFAULT;
             log.info("Kafka lingerMs property is NOT configured, default value is {}", lingerMs);
         } else {
             lingerMs = lingerMsConfigured;
             log.info("Configured. Kafka lingerMs is {}", lingerMs);
         }
 
-        Integer memoryBufferConfigured = Tools.getIntegerProperty(properties, MEMORY_BUFFER);
+        Integer memoryBufferConfigured = Tools.getIntegerProperty(properties, PROP_KAFKA_MEMORY_BUFFER);
         if (memoryBufferConfigured == null) {
-            memoryBuffer = DEFAULT_KAFKA_MEMORY_BUFFER;
+            memoryBuffer = PROP_KAFKA_MEMORY_BUFFER_DEFAULT;
             log.info("Kafka memory buffer property is NOT configured, default value is {}", memoryBuffer);
         } else {
             memoryBuffer = memoryBufferConfigured;
             log.info("Configured. Kafka memory buffer is {}", memoryBuffer);
         }
 
-        String keySerializerStr = Tools.get(properties, KEY_SERIALIZER);
-        keySerializer = keySerializerStr != null ? keySerializerStr : DEFAULT_KAFKA_KEY_SERIALIZER;
+        String keySerializerStr = Tools.get(properties, PROP_KAFKA_KEY_SERIALIZER);
+        keySerializer = keySerializerStr != null ? keySerializerStr : PROP_KAFKA_KEY_SERIALIZER_DEFAULT;
         log.info("Configured, Kafka key serializer is {}", keySerializer);
 
-        String valueSerializerStr = Tools.get(properties, VALUE_SERIALIZER);
-        valueSerializer = valueSerializerStr != null ? valueSerializerStr : DEFAULT_KAFKA_VALUE_SERIALIZER;
+        String valueSerializerStr = Tools.get(properties, PROP_KAFKA_VALUE_SERIALIZER);
+        valueSerializer = valueSerializerStr != null ? valueSerializerStr : PROP_KAFKA_VALUE_SERIALIZER_DEFAULT;
         log.info("Configured, Kafka value serializer is {}", valueSerializer);
 
         Boolean enableServiceConfigured =
-                getBooleanProperty(properties, ENABLE_SERVICE);
+                getBooleanProperty(properties, PROP_KAFKA_ENABLE_SERVICE);
         if (enableServiceConfigured == null) {
-            enableService = DEFAULT_DISABLE;
+            enableService = PROP_KAFKA_ENABLE_SERVICE_DEFAULT;
             log.info("Kafka service enable flag is NOT " +
                     "configured, default value is {}", enableService);
         } else {
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/OsgiPropertyConstants.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/OsgiPropertyConstants.java
new file mode 100644
index 0000000..7be6973
--- /dev/null
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/OsgiPropertyConstants.java
@@ -0,0 +1,151 @@
+/*
+ * 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.openstacktelemetry.impl;
+
+/**
+ * Name/Value constants for properties.
+ */
+public final class OsgiPropertyConstants {
+    private OsgiPropertyConstants() {
+    }
+
+    // REST telemetry
+
+    static final String PROP_REST_ENABLE_SERVICE = "enableService";
+    static final boolean PROP_REST_ENABLE_SERVICE_DEFAULT = false;
+
+    static final String PROP_REST_SERVER_ADDRESS = "address";
+    static final String PROP_REST_SERVER_ADDRESS_DEFAULT = "localhost";
+
+    static final String PROP_REST_SERVER_PORT = "port";
+    static final int PROP_REST_SERVER_PORT_DEFAULT = 80;
+
+    static final String PROP_REST_ENDPOINT = "endpoint";
+    static final String PROP_REST_ENDPOINT_DEFAULT = "telemetry";
+
+    static final String PROP_REST_METHOD = "method";
+    static final String PROP_REST_METHOD_DEFAULT = "POST";
+
+    static final String PROP_REST_REQUEST_MEDIA_TYPE = "requestMediaType";
+    static final String PROP_REST_REQUEST_MEDIA_TYPE_DEFAULT = "application/json";
+
+    static final String PROP_REST_RESPONSE_MEDIA_TYPE = "responseMediaType";
+    static final String PROP_REST_RESPONSE_MEDIA_TYPE_DEFAULT = "application/json";
+
+    // Kafka telemetry
+
+    static final String PROP_KAFKA_ENABLE_SERVICE = "enableService";
+    static final boolean PROP_KAFKA_ENABLE_SERVICE_DEFAULT = false;
+
+    static final String PROP_KAFKA_ADDRESS = "address";
+    static final String PROP_KAFKA_ADDRESS_DEFAULT = "localhost";
+
+    static final String PROP_KAFKA_PORT = "port";
+    static final int PROP_KAFKA_PORT_DEFAULT = 9092;
+
+    static final String PROP_KAFKA_RETRIES = "retries";
+    static final int PROP_KAFKA_RETRIES_DEFAULT = 0;
+
+    static final String PROP_KAFKA_REQUIRED_ACKS = "requiredAcks";
+    static final String PROP_KAFKA_REQUIRED_ACKS_DEFAULT = "all";
+
+    static final String PROP_KAFKA_BATCH_SIZE = "batchSize";
+    static final int PROP_KAFKA_BATCH_SIZE_DEFAULT = 16384;
+
+    static final String PROP_KAFKA_LINGER_MS = "lingerMs";
+    static final int PROP_KAFKA_LINGER_MS_DEFAULT = 1;
+
+    static final String PROP_KAFKA_MEMORY_BUFFER = "memoryBuffer";
+    static final int PROP_KAFKA_MEMORY_BUFFER_DEFAULT = 33554432;
+
+    static final String PROP_KAFKA_KEY_SERIALIZER = "keySerializer";
+    static final String PROP_KAFKA_KEY_SERIALIZER_DEFAULT =
+        "org.apache.kafka.common.serialization.StringSerializer";
+
+    static final String PROP_KAFKA_VALUE_SERIALIZER = "valueSerializer";
+    static final String PROP_KAFKA_VALUE_SERIALIZER_DEFAULT =
+        "org.apache.kafka.common.serialization.ByteArraySerializer";
+
+    // Stats flow rule manager
+
+    static final String PROP_REVERSE_PATH_STATS = "reversePathStats";
+    static final boolean PROP_REVERSE_PATH_STATS_DEFAULT = false;
+
+    static final String PROP_EGRESS_STATS = "egressStats";
+    static final boolean PROP_EGRESS_STATS_DEFAULT = false;
+
+    static final String PROP_PORT_STATS = "portStats";
+    static final boolean PROP_PORT_STATS_DEFAULT = true;
+
+    static final String PROP_MONITOR_OVERLAY = "monitorOverlay";
+    static final boolean PROP_MONITOR_OVERLAY_DEFAULT = true;
+
+    static final String PROP_MONITOR_UNDERLAY = "monitorUnderlay";
+    static final boolean PROP_MONITOR_UNDERLAY_DEFAULT = true;
+
+    // Influx DB Telemetry config manager
+
+    static final String PROP_INFLUXDB_ENABLE_SERVICE = "enableService";
+    static final boolean PROP_INFLUXDB_ENABLE_SERVICE_DEFAULT = false;
+
+    static final String PROP_INFLUXDB_SERVER_ADDRESS = "address";
+    static final String PROP_INFLUXDB_SERVER_ADDRESS_DEFAULT = "localhost";
+
+    static final String PROP_INFLUXDB_SERVER_PORT = "port";
+    static final int PROP_INFLUXDB_SERVER_PORT_DEFAULT = 8086;
+
+    static final String PROP_INFLUXDB_USERNAME = "username";
+    static final String PROP_INFLUXDB_USERNAME_DEFAULT = "onos";
+
+    static final String PROP_INFLUXDB_PASSWORD = "password";
+    static final String PROP_INFLUXDB_PASSWORD_DEFAULT = "onos";
+
+    static final String PROP_INFLUXDB_DATABASE = "database";
+    static final String PROP_INFLUXDB_DATABASE_DEFAULT = "onos";
+
+    static final String PROP_INFLUXDB_MEASUREMENT = "measurement";
+    static final String PROP_INFLUXDB_MEASUREMENT_DEFAULT = "sonaflow";
+
+    static final String PROP_INFLUXDB_ENABLE_BATCH = "enableBatch";
+    static final boolean PROP_INFLUXDB_ENABLE_BATCH_DEFAULT = true;
+
+    // GRPC Telemetry config manager
+    static final String PROP_GRPC_ENABLE_SERVICE = "enableService";
+    static final boolean GRPC_ENABLE_SERVICE_DEFAULT = false;
+
+    static final String PROP_GRPC_SERVER_ADDRESS = "address";
+    static final String GRPC_SERVER_ADDRESS_DEFAULT = "localhost";
+
+    static final String PROP_GRPC_SERVER_PORT = "port";
+    static final int GRPC_SERVER_PORT_DEFAULT = 50051;
+
+    static final String PROP_GRPC_USE_PLAINTEXT = "usePlaintext";
+    static final boolean GRPC_USE_PLAINTEXT_DEFAULT = true;
+
+    static final String PROP_GRPC_MAX_INBOUND_MSG_SIZE = "maxInboundMsgSize";
+    static final int GRPC_MAX_INBOUND_MSG_SIZE_DEFAULT = 4194304; //4 * 1024 * 1024;
+
+    // Prometheus Telemetry config manager
+    static final String PROP_PROMETHEUS_ENABLE_SERVICE = "enableService";
+    static final boolean PROMETHEUS_ENABLE_SERVICE_DEFAULT = false;
+
+    static final String PROP_PROMETHEUS_EXPORTER_ADDRESS = "address";
+    public static final String PROMETHEUS_EXPORTER_ADDRESS_DEFAULT = "localhost";
+
+    static final String PROP_PROMETHEUS_EXPORTER_PORT = "port";
+    public static final int PROMETHEUS_EXPORTER_PORT_DEFAULT = 50051;
+}
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/PrometheusTelemetryConfigManager.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/PrometheusTelemetryConfigManager.java
index 49a9547..4405b97 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/PrometheusTelemetryConfigManager.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/PrometheusTelemetryConfigManager.java
@@ -14,12 +14,7 @@
  * limitations under the License.
  */
 package org.onosproject.openstacktelemetry.impl;
-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.osgi.service.component.annotations.Reference;
-import org.osgi.service.component.annotations.ReferenceCardinality;
+
 import org.onlab.util.Tools;
 import org.onosproject.cfg.ComponentConfigService;
 import org.onosproject.openstacktelemetry.api.PrometheusTelemetryAdminService;
@@ -27,47 +22,56 @@
 import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
 import org.onosproject.openstacktelemetry.config.DefaultPrometheusTelemetryConfig;
 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.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.Dictionary;
 
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_DISABLE;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_ENABLE;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_PROMETHEUS_EXPORTER_IP;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_PROMETHEUS_EXPORTER_PORT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROMETHEUS_ENABLE_SERVICE_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROMETHEUS_EXPORTER_ADDRESS_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROMETHEUS_EXPORTER_PORT_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_PROMETHEUS_ENABLE_SERVICE;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_PROMETHEUS_EXPORTER_ADDRESS;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_PROMETHEUS_EXPORTER_PORT;
 import static org.onosproject.openstacktelemetry.util.OpenstackTelemetryUtil.getBooleanProperty;
 import static org.onosproject.openstacktelemetry.util.OpenstackTelemetryUtil.initTelemetryService;
 
 /**
  * Prometheus exporter configuration manager for publishing openstack telemetry.
  */
-@Component(immediate = true, service = PrometheusTelemetryConfigService.class)
+@Component(
+    immediate = true,
+    service = PrometheusTelemetryConfigService.class,
+    property = {
+        PROP_PROMETHEUS_ENABLE_SERVICE + ":Boolean=" + PROMETHEUS_ENABLE_SERVICE_DEFAULT,
+        PROP_PROMETHEUS_EXPORTER_ADDRESS + "=" + PROMETHEUS_EXPORTER_ADDRESS_DEFAULT,
+        PROP_PROMETHEUS_EXPORTER_PORT + ":Integer=" + PROMETHEUS_EXPORTER_PORT_DEFAULT
+    }
+)
 public class PrometheusTelemetryConfigManager implements PrometheusTelemetryConfigService {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    private static final String ENABLE_SERVICE = "enableService";
-    private static final String ADDRESS = "address";
-    private static final String PORT = "port";
-
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected ComponentConfigService componentConfigService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected PrometheusTelemetryAdminService prometheusTelemetryAdminService;
 
-    //@Property(name = ADDRESS, value = DEFAULT_PROMETHEUS_EXPORTER_IP,
-    //        label = "Default IP address of prometheus exporter")
-    protected String address = DEFAULT_PROMETHEUS_EXPORTER_IP;
+    /** Default IP address of prometheus exporter. */
+    protected String address = PROMETHEUS_EXPORTER_ADDRESS_DEFAULT;
 
-    //@Property(name = PORT, intValue = DEFAULT_PROMETHEUS_EXPORTER_PORT,
-    //        label = "Default port number of prometheus exporter")
-    protected Integer port = DEFAULT_PROMETHEUS_EXPORTER_PORT;
+    /** Default port number of prometheus exporter. */
+    protected Integer port = PROMETHEUS_EXPORTER_PORT_DEFAULT;
 
-    //@Property(name = ENABLE_SERVICE, boolValue = DEFAULT_ENABLE,
-    //        label = "Specify the default behavior of telemetry service")
-    protected Boolean enableService = DEFAULT_ENABLE;
+    /** Specify the default behavior of telemetry service. */
+    protected Boolean enableService = PROMETHEUS_ENABLE_SERVICE_DEFAULT;
 
     @Activate
     protected void activate(ComponentContext context) {
@@ -110,22 +114,22 @@
     private void readComponentConfiguration(ComponentContext context) {
         Dictionary<?, ?> properties = context.getProperties();
 
-        String addressStr = Tools.get(properties, ADDRESS);
-        address = addressStr != null ? addressStr : DEFAULT_PROMETHEUS_EXPORTER_IP;
+        String addressStr = Tools.get(properties, PROP_PROMETHEUS_EXPORTER_ADDRESS);
+        address = addressStr != null ? addressStr : PROMETHEUS_EXPORTER_ADDRESS_DEFAULT;
         log.info("Configured. Prometheus exporter address is {}", address);
 
-        Integer portConfigured = Tools.getIntegerProperty(properties, PORT);
+        Integer portConfigured = Tools.getIntegerProperty(properties, PROP_PROMETHEUS_EXPORTER_PORT);
         if (portConfigured == null) {
-            port = DEFAULT_PROMETHEUS_EXPORTER_PORT;
+            port = PROMETHEUS_EXPORTER_PORT_DEFAULT;
             log.info("Prometheus exporter port is NOT configured, default value is {}", port);
         } else {
             port = portConfigured;
             log.info("Configured. Prometheus exporter port is {}", port);
         }
 
-        Boolean enableServiceConfigured = getBooleanProperty(properties, ENABLE_SERVICE);
+        Boolean enableServiceConfigured = getBooleanProperty(properties, PROP_PROMETHEUS_ENABLE_SERVICE);
         if (enableServiceConfigured == null) {
-            enableService = DEFAULT_DISABLE;
+            enableService = PROMETHEUS_ENABLE_SERVICE_DEFAULT;
             log.info("Prometheus service enable flag is NOT " +
                              "configured, default value is {}", enableService);
         } else {
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/RestTelemetryConfigManager.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/RestTelemetryConfigManager.java
index e3b76b6..16b62cb 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/RestTelemetryConfigManager.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/RestTelemetryConfigManager.java
@@ -33,65 +33,69 @@
 
 import java.util.Dictionary;
 
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_DISABLE;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_REST_ENDPOINT;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_REST_METHOD;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_REST_REQUEST_MEDIA_TYPE;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_REST_RESPONSE_MEDIA_TYPE;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_REST_SERVER_IP;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_REST_SERVER_PORT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_REST_SERVER_ADDRESS;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_REST_ENABLE_SERVICE;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_REST_ENABLE_SERVICE_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_REST_ENDPOINT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_REST_METHOD;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_REST_SERVER_PORT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_REST_REQUEST_MEDIA_TYPE;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_REST_RESPONSE_MEDIA_TYPE;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_REST_ENDPOINT_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_REST_METHOD_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_REST_REQUEST_MEDIA_TYPE_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_REST_RESPONSE_MEDIA_TYPE_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_REST_SERVER_ADDRESS_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_REST_SERVER_PORT_DEFAULT;
 import static org.onosproject.openstacktelemetry.util.OpenstackTelemetryUtil.getBooleanProperty;
 import static org.onosproject.openstacktelemetry.util.OpenstackTelemetryUtil.initTelemetryService;
 
 /**
  * REST server configuration manager for publishing openstack telemetry.
  */
-@Component(immediate = true, service = RestTelemetryConfigService.class)
+@Component(
+    immediate = true,
+    service = RestTelemetryConfigService.class,
+    property = {
+        PROP_REST_ENABLE_SERVICE + ":Boolean=" + PROP_REST_ENABLE_SERVICE_DEFAULT,
+        PROP_REST_SERVER_ADDRESS + "=" + PROP_REST_SERVER_ADDRESS_DEFAULT,
+        PROP_REST_SERVER_PORT + ":Integer=" + PROP_REST_SERVER_PORT_DEFAULT,
+        PROP_REST_ENDPOINT + "=" + PROP_REST_ENDPOINT_DEFAULT,
+        PROP_REST_METHOD + "=" + PROP_REST_METHOD_DEFAULT,
+        PROP_REST_REQUEST_MEDIA_TYPE + "=" + PROP_REST_REQUEST_MEDIA_TYPE_DEFAULT,
+        PROP_REST_RESPONSE_MEDIA_TYPE + "=" + PROP_REST_RESPONSE_MEDIA_TYPE_DEFAULT
+    }
+)
 public class RestTelemetryConfigManager implements RestTelemetryConfigService {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    private static final String ENABLE_SERVICE = "enableService";
-    private static final String ADDRESS = "address";
-    private static final String PORT = "port";
-    private static final String ENDPOINT = "endpoint";
-    private static final String METHOD = "method";
-    private static final String REQUEST_MEDIA_TYPE = "requestMediaType";
-    private static final String RESPONSE_MEDIA_TYPE = "responseMediaType";
-
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected ComponentConfigService componentConfigService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected RestTelemetryAdminService restTelemetryAdminService;
 
-    //@Property(name = ADDRESS, value = DEFAULT_REST_SERVER_IP,
-    //        label = "Default IP address to establish initial connection to REST server")
-    protected String address = DEFAULT_REST_SERVER_IP;
+    /** Default IP address to establish initial connection to REST server. */
+    protected String address = PROP_REST_SERVER_ADDRESS_DEFAULT;
 
-    //@Property(name = PORT, intValue = DEFAULT_REST_SERVER_PORT,
-    //        label = "Default port number to establish initial connection to REST server")
-    protected Integer port = DEFAULT_REST_SERVER_PORT;
+    /** Default port number to establish initial connection to REST server. */
+    protected Integer port = PROP_REST_SERVER_PORT_DEFAULT;
 
-    //@Property(name = ENDPOINT, value = DEFAULT_REST_ENDPOINT,
-    //        label = "Endpoint of REST server")
-    protected String endpoint = DEFAULT_REST_ENDPOINT;
+    /** Endpoint of REST server. */
+    protected String endpoint = PROP_REST_ENDPOINT_DEFAULT;
 
-    //@Property(name = METHOD, value = DEFAULT_REST_METHOD,
-    //        label = "HTTP method of REST server")
-    protected String method = DEFAULT_REST_METHOD;
+    /** HTTP method of REST server. */
+    protected String method = PROP_REST_METHOD_DEFAULT;
 
-    //@Property(name = REQUEST_MEDIA_TYPE, value = DEFAULT_REST_REQUEST_MEDIA_TYPE,
-    //        label = "Request media type of REST server")
-    protected String requestMediaType = DEFAULT_REST_REQUEST_MEDIA_TYPE;
+    /** Request media type of REST server. */
+    protected String requestMediaType = PROP_REST_REQUEST_MEDIA_TYPE_DEFAULT;
 
-    //@Property(name = RESPONSE_MEDIA_TYPE, value = DEFAULT_REST_RESPONSE_MEDIA_TYPE,
-    //        label = "Response media type of REST server")
-    protected String responseMediaType = DEFAULT_REST_RESPONSE_MEDIA_TYPE;
+    /** Response media type of REST server. */
+    protected String responseMediaType = PROP_REST_RESPONSE_MEDIA_TYPE_DEFAULT;
 
-    //@Property(name = ENABLE_SERVICE, boolValue = DEFAULT_DISABLE,
-    //        label = "Specify the default behavior of telemetry service")
-    protected Boolean enableService = DEFAULT_DISABLE;
+    /** Specify the default behavior of telemetry service. */
+    protected Boolean enableService = PROP_REST_ENABLE_SERVICE_DEFAULT;
 
     @Activate
     protected void activate(ComponentContext context) {
@@ -140,41 +144,41 @@
     private void readComponentConfiguration(ComponentContext context) {
         Dictionary<?, ?> properties = context.getProperties();
 
-        String addressStr = Tools.get(properties, ADDRESS);
-        address = addressStr != null ? addressStr : DEFAULT_REST_SERVER_IP;
+        String addressStr = Tools.get(properties, PROP_REST_SERVER_ADDRESS);
+        address = addressStr != null ? addressStr : PROP_REST_SERVER_ADDRESS_DEFAULT;
         log.info("Configured. REST server address is {}", address);
 
-        Integer portConfigured = Tools.getIntegerProperty(properties, PORT);
+        Integer portConfigured = Tools.getIntegerProperty(properties, PROP_REST_SERVER_PORT);
         if (portConfigured == null) {
-            port = DEFAULT_REST_SERVER_PORT;
+            port = PROP_REST_SERVER_PORT_DEFAULT;
             log.info("REST server port is NOT configured, default value is {}", port);
         } else {
             port = portConfigured;
             log.info("Configured. REST server port is {}", port);
         }
 
-        String endpointStr = Tools.get(properties, ENDPOINT);
-        endpoint = endpointStr != null ? endpointStr : DEFAULT_REST_ENDPOINT;
+        String endpointStr = Tools.get(properties, PROP_REST_ENDPOINT);
+        endpoint = endpointStr != null ? endpointStr : PROP_REST_ENDPOINT_DEFAULT;
         log.info("Configured. REST server endpoint is {}", endpoint);
 
-        String methodStr = Tools.get(properties, METHOD);
-        method = methodStr != null ? methodStr : DEFAULT_REST_METHOD;
+        String methodStr = Tools.get(properties, PROP_REST_METHOD);
+        method = methodStr != null ? methodStr : PROP_REST_METHOD_DEFAULT;
         log.info("Configured. REST server default HTTP method is {}", method);
 
-        String requestMediaTypeStr = Tools.get(properties, REQUEST_MEDIA_TYPE);
+        String requestMediaTypeStr = Tools.get(properties, PROP_REST_REQUEST_MEDIA_TYPE);
         requestMediaType = requestMediaTypeStr != null ?
-                requestMediaTypeStr : DEFAULT_REST_REQUEST_MEDIA_TYPE;
+                requestMediaTypeStr : PROP_REST_REQUEST_MEDIA_TYPE_DEFAULT;
         log.info("Configured. REST server request media type is {}", requestMediaType);
 
-        String responseMediaTypeStr = Tools.get(properties, RESPONSE_MEDIA_TYPE);
+        String responseMediaTypeStr = Tools.get(properties, PROP_REST_RESPONSE_MEDIA_TYPE);
         responseMediaType = responseMediaTypeStr != null ?
-                responseMediaTypeStr : DEFAULT_REST_RESPONSE_MEDIA_TYPE;
+                responseMediaTypeStr : PROP_REST_RESPONSE_MEDIA_TYPE_DEFAULT;
         log.info("Configured. REST server response media type is {}", responseMediaType);
 
         Boolean enableServiceConfigured =
-                getBooleanProperty(properties, ENABLE_SERVICE);
+                getBooleanProperty(properties, PROP_REST_ENABLE_SERVICE);
         if (enableServiceConfigured == null) {
-            enableService = DEFAULT_DISABLE;
+            enableService = PROP_REST_ENABLE_SERVICE_DEFAULT;
             log.info("REST service enable flag is NOT " +
                     "configured, default value is {}", enableService);
         } else {
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/StatsFlowRuleManager.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/StatsFlowRuleManager.java
index 5ffd40c..4ddaf40 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/StatsFlowRuleManager.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/StatsFlowRuleManager.java
@@ -108,12 +108,32 @@
 import static org.onosproject.openstacktelemetry.api.Constants.OPENSTACK_TELEMETRY_APP_ID;
 import static org.onosproject.openstacktelemetry.api.Constants.VLAN;
 import static org.onosproject.openstacktelemetry.api.Constants.VXLAN;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_EGRESS_STATS;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_EGRESS_STATS_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_MONITOR_OVERLAY;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_MONITOR_OVERLAY_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_MONITOR_UNDERLAY;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_MONITOR_UNDERLAY_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_PORT_STATS;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_PORT_STATS_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_REVERSE_PATH_STATS;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_REVERSE_PATH_STATS_DEFAULT;
 import static org.onosproject.openstacktelemetry.util.OpenstackTelemetryUtil.getBooleanProperty;
 
 /**
  * Flow rule manager for network statistics of a VM.
  */
-@Component(immediate = true, service = StatsFlowRuleAdminService.class)
+@Component(
+    immediate = true,
+    service = StatsFlowRuleAdminService.class,
+    property = {
+        PROP_REVERSE_PATH_STATS + ":Boolean=" + PROP_REVERSE_PATH_STATS_DEFAULT,
+        PROP_EGRESS_STATS  + ":Boolean=" + PROP_EGRESS_STATS_DEFAULT,
+        PROP_PORT_STATS + ":Boolean=" + PROP_PORT_STATS_DEFAULT,
+        PROP_MONITOR_OVERLAY  + ":Boolean=" + PROP_MONITOR_OVERLAY_DEFAULT,
+        PROP_MONITOR_UNDERLAY  + ":Boolean=" + PROP_MONITOR_UNDERLAY_DEFAULT
+    }
+)
 public class StatsFlowRuleManager implements StatsFlowRuleAdminService {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
@@ -125,22 +145,8 @@
     private static final long REFRESH_INTERVAL = 5L;
     private static final TimeUnit TIME_UNIT_SECOND = TimeUnit.SECONDS;
 
-    private static final String REVERSE_PATH_STATS = "reversePathStats";
-    private static final String EGRESS_STATS = "egressStats";
-    private static final String PORT_STATS = "portStats";
-
-    private static final String MONITOR_OVERLAY = "monitorOverlay";
-    private static final String MONITOR_UNDERLAY = "monitorUnderlay";
-
     private static final String OVS_DRIVER_NAME = "ovs";
 
-    private static final boolean DEFAULT_REVERSE_PATH_STATS = false;
-    private static final boolean DEFAULT_EGRESS_STATS = false;
-    private static final boolean DEFAULT_PORT_STATS = true;
-
-    private static final boolean DEFAULT_MONITOR_OVERLAY = true;
-    private static final boolean DEFAULT_MONITOR_UNDERLAY = true;
-
     private static final String ARBITRARY_IP = "0.0.0.0/32";
     private static final int ARBITRARY_PROTOCOL = 0x0;
     private static final int ARBITRARY_LENGTH = 32;
@@ -185,27 +191,20 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected OpenstackTelemetryService telemetryService;
 
-    //@Property(name = REVERSE_PATH_STATS, boolValue = DEFAULT_REVERSE_PATH_STATS,
-    //        label = "A flag which indicates whether to install the rules for " +
-    //                "collecting the flow-based stats for reversed path.")
-    private boolean reversePathStats = DEFAULT_REVERSE_PATH_STATS;
+    /** A flag which indicates whether to install the rules for collecting the flow-based stats for reversed path. */
+    private boolean reversePathStats = PROP_REVERSE_PATH_STATS_DEFAULT;
 
-    //@Property(name = EGRESS_STATS, boolValue = DEFAULT_EGRESS_STATS,
-    //        label = "A flag which indicates whether to install the rules for " +
-    //                "collecting the flow-based stats for egress port.")
-    private boolean egressStats = DEFAULT_EGRESS_STATS;
+    /** A flag which indicates whether to install the rules for collecting the flow-based stats for egress port. */
+    private boolean egressStats = PROP_EGRESS_STATS_DEFAULT;
 
-    //@Property(name = PORT_STATS, boolValue = DEFAULT_PORT_STATS,
-    //        label = "A flag which indicates whether to collect port TX & RX stats.")
-    private boolean portStats = DEFAULT_PORT_STATS;
+    /** A flag which indicates whether to collect port TX & RX stats. */
+    private boolean portStats = PROP_PORT_STATS_DEFAULT;
 
-    //@Property(name = MONITOR_OVERLAY, boolValue = DEFAULT_MONITOR_OVERLAY,
-    //        label = "A flag which indicates whether to monitor overlay network port stats.")
-    private boolean monitorOverlay = DEFAULT_MONITOR_OVERLAY;
+    /** A flag which indicates whether to monitor overlay network port stats. */
+    private boolean monitorOverlay = PROP_MONITOR_OVERLAY_DEFAULT;
 
-    //@Property(name = MONITOR_UNDERLAY, boolValue = DEFAULT_MONITOR_UNDERLAY,
-    //        label = "A flag which indicates whether to monitor underlay network port stats.")
-    private boolean monitorUnderlay = DEFAULT_MONITOR_UNDERLAY;
+    /** A flag which indicates whether to monitor underlay network port stats. */
+    private boolean monitorUnderlay = PROP_MONITOR_UNDERLAY_DEFAULT;
 
     private ApplicationId telemetryAppId;
     private TelemetryCollector collector;
@@ -986,9 +985,9 @@
         Dictionary<?, ?> properties = context.getProperties();
 
         Boolean reversePathStatsConfigured =
-                            getBooleanProperty(properties, REVERSE_PATH_STATS);
+                            getBooleanProperty(properties, PROP_REVERSE_PATH_STATS);
         if (reversePathStatsConfigured == null) {
-            reversePathStats = DEFAULT_REVERSE_PATH_STATS;
+            reversePathStats = PROP_REVERSE_PATH_STATS_DEFAULT;
             log.info("Reversed path stats flag is NOT " +
                      "configured, default value is {}", reversePathStats);
         } else {
@@ -996,9 +995,9 @@
             log.info("Configured. Reversed path stats flag is {}", reversePathStats);
         }
 
-        Boolean egressStatsConfigured = getBooleanProperty(properties, EGRESS_STATS);
+        Boolean egressStatsConfigured = getBooleanProperty(properties, PROP_EGRESS_STATS);
         if (egressStatsConfigured == null) {
-            egressStats = DEFAULT_EGRESS_STATS;
+            egressStats = PROP_EGRESS_STATS_DEFAULT;
             log.info("Egress stats flag is NOT " +
                      "configured, default value is {}", egressStats);
         } else {
@@ -1006,9 +1005,9 @@
             log.info("Configured. Egress stats flag is {}", egressStats);
         }
 
-        Boolean portStatsConfigured = getBooleanProperty(properties, PORT_STATS);
+        Boolean portStatsConfigured = getBooleanProperty(properties, PROP_PORT_STATS);
         if (portStatsConfigured == null) {
-            portStats = DEFAULT_PORT_STATS;
+            portStats = PROP_PORT_STATS_DEFAULT;
             log.info("Port stats flag is NOT " +
                     "configured, default value is {}", portStats);
         } else {
@@ -1016,9 +1015,9 @@
             log.info("Configured. Port stats flag is {}", portStats);
         }
 
-        Boolean monitorOverlayConfigured = getBooleanProperty(properties, MONITOR_OVERLAY);
+        Boolean monitorOverlayConfigured = getBooleanProperty(properties, PROP_MONITOR_OVERLAY);
         if (monitorOverlayConfigured == null) {
-            monitorOverlay = DEFAULT_MONITOR_OVERLAY;
+            monitorOverlay = PROP_MONITOR_OVERLAY_DEFAULT;
             log.info("Monitor overlay flag is NOT " +
                     "configured, default value is {}", monitorOverlay);
         } else {
@@ -1026,9 +1025,9 @@
             log.info("Configured. Monitor overlay flag is {}", monitorOverlay);
         }
 
-        Boolean monitorUnderlayConfigured = getBooleanProperty(properties, MONITOR_UNDERLAY);
+        Boolean monitorUnderlayConfigured = getBooleanProperty(properties, PROP_MONITOR_UNDERLAY);
         if (monitorUnderlayConfigured == null) {
-            monitorUnderlay = DEFAULT_MONITOR_UNDERLAY;
+            monitorUnderlay = PROP_MONITOR_UNDERLAY_DEFAULT;
             log.info("Monitor underlay flag is NOT " +
                     "configured, default value is {}", monitorUnderlay);
         } else {
diff --git a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfigTest.java b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfigTest.java
index 3e291c2..6a0c0b5 100644
--- a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfigTest.java
+++ b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfigTest.java
@@ -26,19 +26,19 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_PROMETHEUS_EXPORTER_IP;
-import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_PROMETHEUS_EXPORTER_PORT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROMETHEUS_EXPORTER_PORT_DEFAULT;
+import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROMETHEUS_EXPORTER_ADDRESS_DEFAULT;
 
 /**
  * Unit tests for DefaultPrometheusTelemetryConfig class.
  */
 public class DefaultPrometheusTelemetryConfigTest {
 
-    private static final String IP_ADDRESS_1 = DEFAULT_PROMETHEUS_EXPORTER_IP;
+    private static final String IP_ADDRESS_1 = PROMETHEUS_EXPORTER_ADDRESS_DEFAULT;
     private static final String IP_ADDRESS_2 = "10.10.1.2";
 
-    private static final int PORT_1 = DEFAULT_PROMETHEUS_EXPORTER_PORT;
-    private static final int PORT_2 = DEFAULT_PROMETHEUS_EXPORTER_PORT + 1;
+    private static final int PORT_1 = PROMETHEUS_EXPORTER_PORT_DEFAULT;
+    private static final int PORT_2 = PROMETHEUS_EXPORTER_PORT_DEFAULT + 1;
 
     private static final Map<String, Object> CONFIG_MAP_1 =
             ImmutableMap.of("key1", "value1");
