diff --git a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java
index e70be90..8decb7f 100644
--- a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java
+++ b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java
@@ -115,20 +115,25 @@
 import static org.onlab.packet.MacAddress.valueOf;
 import static org.onlab.packet.dhcp.DhcpRelayAgentOption.RelayAgentInfoOptions.CIRCUIT_ID;
 import static org.onlab.util.Tools.groupedThreads;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.LEARN_ROUTE_FROM_LEASE_QUERY;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.LEARN_ROUTE_FROM_LEASE_QUERY_DEFAULT;
 import static org.onosproject.net.flowobjective.Objective.Operation.ADD;
 import static org.onosproject.net.flowobjective.Objective.Operation.REMOVE;
 
 
-@Component(service = { DhcpHandler.class, HostProvider.class })
-//@Property(name = "version", value = "4")
+@Component(
+    service = { DhcpHandler.class, HostProvider.class },
+    property = {
+        "version:Integer = 4",
+        LEARN_ROUTE_FROM_LEASE_QUERY + ":Boolean=" + LEARN_ROUTE_FROM_LEASE_QUERY_DEFAULT
+    }
+)
 public class Dhcp4HandlerImpl implements DhcpHandler, HostProvider {
     public static final String DHCP_V4_RELAY_APP = "org.onosproject.Dhcp4HandlerImpl";
     public static final ProviderId PROVIDER_ID = new ProviderId("dhcp4", DHCP_V4_RELAY_APP);
     private static final String BROADCAST_IP = "255.255.255.255";
     private static final int IGNORE_CONTROL_PRIORITY = PacketPriority.CONTROL.priorityValue() + 1000;
 
-    private static final String LQ_ROUTE_PROPERTY_NAME = "learnRouteFromLeasequery";
-
     private static final TrafficSelector CLIENT_SERVER_SELECTOR = DefaultTrafficSelector.builder()
             .matchEthType(Ethernet.TYPE_IPV4)
             .matchIPProtocol(IPv4.PROTOCOL_UDP)
@@ -187,9 +192,8 @@
     private List<DhcpServerInfo> defaultServerInfoList = new CopyOnWriteArrayList<>();
     private List<DhcpServerInfo> indirectServerInfoList = new CopyOnWriteArrayList<>();
 
-    //@Property(name = Dhcp4HandlerImpl.LQ_ROUTE_PROPERTY_NAME, boolValue = false,
-    //        label = "Enable learning routing information from LQ")
-    private Boolean learnRouteFromLeasequery = Boolean.TRUE;
+    /** Enable learning routing information from LQ. */
+    private Boolean learnRouteFromLeasequery = LEARN_ROUTE_FROM_LEASE_QUERY_DEFAULT;
 
     private Executor hostEventExecutor = newSingleThreadExecutor(
         groupedThreads("dhcp4-event-host", "%d", log));
@@ -220,7 +224,7 @@
     protected void modified(ComponentContext context) {
         Dictionary<?, ?> properties = context.getProperties();
         Boolean flag;
-        flag = Tools.isPropertyEnabled(properties, Dhcp4HandlerImpl.LQ_ROUTE_PROPERTY_NAME);
+        flag = Tools.isPropertyEnabled(properties, LEARN_ROUTE_FROM_LEASE_QUERY);
         if (flag != null) {
             learnRouteFromLeasequery = flag;
             log.info("Learning routes from DHCP leasequery is {}",
diff --git a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java
index d42cc09..a30d685 100644
--- a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java
+++ b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java
@@ -120,18 +120,25 @@
 import static com.google.common.base.Preconditions.checkState;
 import static java.util.concurrent.Executors.newSingleThreadExecutor;
 import static org.onlab.util.Tools.groupedThreads;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.LEARN_ROUTE_FROM_LEASE_QUERY;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.LEARN_ROUTE_FROM_LEASE_QUERY_DEFAULT;
 import static org.onosproject.net.flowobjective.Objective.Operation.ADD;
 import static org.onosproject.net.flowobjective.Objective.Operation.REMOVE;
 import java.util.concurrent.Semaphore;
 
-@Component(service = { DhcpHandler.class, HostProvider.class })
-//@Property(name = "version", value = "6")
+@Component(
+    service = { DhcpHandler.class, HostProvider.class },
+    property = {
+        "version:Integer=6",
+        LEARN_ROUTE_FROM_LEASE_QUERY + ":Boolean=" + LEARN_ROUTE_FROM_LEASE_QUERY_DEFAULT
+    }
+)
+
 public class Dhcp6HandlerImpl implements DhcpHandler, HostProvider {
     public static final String DHCP_V6_RELAY_APP = "org.onosproject.Dhcp6HandlerImpl";
     public static final ProviderId PROVIDER_ID = new ProviderId("dhcp6", DHCP_V6_RELAY_APP);
     private static final int IGNORE_CONTROL_PRIORITY = PacketPriority.CONTROL.priorityValue() + 1000;
     private String gCount = "global";
-    private static final String LQ_ROUTE_PROPERTY_NAME = "learnRouteFromLeasequery";
     private static final TrafficSelector CLIENT_SERVER_SELECTOR = DefaultTrafficSelector.builder()
             .matchEthType(Ethernet.TYPE_IPV6)
             .matchIPProtocol(IPv6.PROTOCOL_UDP)
@@ -197,9 +204,8 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected ComponentConfigService cfgService;
 
-    //@Property(name = Dhcp6HandlerImpl.LQ_ROUTE_PROPERTY_NAME, boolValue = false,
-    //        label = "Enable learning routing information from LQ")
-    private Boolean learnRouteFromLeasequery = Boolean.TRUE;
+    /** Enable learning routing information from LQ. */
+    private Boolean learnRouteFromLeasequery = LEARN_ROUTE_FROM_LEASE_QUERY_DEFAULT;
 
     protected HostProviderService providerService;
     protected ApplicationId appId;
@@ -267,7 +273,7 @@
     protected void modified(ComponentContext context) {
         Dictionary<?, ?> properties = context.getProperties();
         Boolean flag;
-        flag = Tools.isPropertyEnabled(properties, Dhcp6HandlerImpl.LQ_ROUTE_PROPERTY_NAME);
+        flag = Tools.isPropertyEnabled(properties, LEARN_ROUTE_FROM_LEASE_QUERY);
         if (flag != null) {
             learnRouteFromLeasequery = flag;
             log.info("Learning routes from DHCP leasequery is {}",
diff --git a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/DhcpRelayManager.java b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/DhcpRelayManager.java
index 3bb7f4e..bb5a794 100644
--- a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/DhcpRelayManager.java
+++ b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/DhcpRelayManager.java
@@ -96,12 +96,26 @@
 import java.util.stream.Stream;
 
 import static org.onlab.util.Tools.groupedThreads;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.ARP_ENABLED;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.ARP_ENABLED_DEFAULT;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.DHCP_FPM_ENABLED;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.DHCP_FPM_ENABLED_DEFAULT;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.DHCP_POLL_INTERVAL;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.DHCP_POLL_INTERVAL_DEFAULT;
 import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY;
 
 /**
  * DHCP Relay Agent Application Component.
  */
-@Component(immediate = true, service = DhcpRelayService.class)
+@Component(
+    immediate = true,
+    service = DhcpRelayService.class,
+    property = {
+        ARP_ENABLED + ":Boolean=" + ARP_ENABLED_DEFAULT,
+        DHCP_POLL_INTERVAL + ":Integer=" + DHCP_POLL_INTERVAL_DEFAULT,
+        DHCP_FPM_ENABLED + ":Boolean=" + DHCP_FPM_ENABLED_DEFAULT
+    }
+)
 public class DhcpRelayManager implements DhcpRelayService {
     public static final String DHCP_RELAY_APP = "org.onosproject.dhcprelay";
     public static final String ROUTE_STORE_IMPL =
@@ -188,17 +202,14 @@
             target = "(version=6)")
     protected DhcpHandler v6Handler;
 
-    //@Property(name = "arpEnabled", boolValue = true,
-    //        label = "Enable Address resolution protocol")
-    protected boolean arpEnabled = true;
+    /** Enable Address resolution protocol. */
+    protected boolean arpEnabled = ARP_ENABLED_DEFAULT;
 
-    //@Property(name = "dhcpPollInterval", intValue = 24 * 3600,
-    //        label = "dhcp relay poll interval")
-    protected int dhcpPollInterval = 24 * 3600;
+    /** dhcp relay poll interval. */
+    protected int dhcpPollInterval = DHCP_POLL_INTERVAL_DEFAULT;
 
-    //@Property(name = "dhcpFpmEnabled", boolValue = false,
-    //        label = "Enable DhcpRelay Fpm")
-    protected boolean dhcpFpmEnabled = false;
+    /** Enable DhcpRelay Fpm. */
+    protected boolean dhcpFpmEnabled = DHCP_FPM_ENABLED_DEFAULT;
 
     private ScheduledExecutorService timerExecutor;
 
@@ -269,7 +280,7 @@
         Dictionary<?, ?> properties = context.getProperties();
         Boolean flag;
 
-        flag = Tools.isPropertyEnabled(properties, "arpEnabled");
+        flag = Tools.isPropertyEnabled(properties, ARP_ENABLED);
         if (flag != null) {
             arpEnabled = flag;
             log.info("Address resolution protocol is {}",
@@ -282,7 +293,7 @@
             cancelArpPackets();
         }
 
-        int intervalVal = Tools.getIntegerProperty(properties, "dhcpPollInterval");
+        int intervalVal = Tools.getIntegerProperty(properties, DHCP_POLL_INTERVAL);
         log.info("DhcpRelay poll interval new {} old {}", intervalVal, dhcpPollInterval);
         if (intervalVal !=  dhcpPollInterval) {
             timerExecutor.shutdown();
@@ -297,7 +308,7 @@
             v6Handler.setDhcp6PollInterval(dhcpPollInterval);
         }
 
-        flag = Tools.isPropertyEnabled(properties, "dhcpFpmEnabled");
+        flag = Tools.isPropertyEnabled(properties, DHCP_FPM_ENABLED);
         if (flag != null) {
             boolean oldValue = dhcpFpmEnabled;
             dhcpFpmEnabled = flag;
diff --git a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/OsgiPropertyConstants.java b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/OsgiPropertyConstants.java
new file mode 100644
index 0000000..7e794fe
--- /dev/null
+++ b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/OsgiPropertyConstants.java
@@ -0,0 +1,34 @@
+/*
+ * 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.dhcprelay;
+
+public final class OsgiPropertyConstants {
+    private OsgiPropertyConstants() {
+    }
+
+    static final String ARP_ENABLED = "arpEnabled";
+    static final boolean ARP_ENABLED_DEFAULT = true;
+
+    static final String DHCP_POLL_INTERVAL = "dhcpPollInterval";
+    static final int DHCP_POLL_INTERVAL_DEFAULT = 86400;
+
+    static final String DHCP_FPM_ENABLED = "dhcpFpmEnabled";
+    static final boolean DHCP_FPM_ENABLED_DEFAULT = false;
+
+    static final String LEARN_ROUTE_FROM_LEASE_QUERY = "learnRouteFromLeasequery";
+    static final boolean LEARN_ROUTE_FROM_LEASE_QUERY_DEFAULT = false;
+}
diff --git a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/store/DistributedFpmPrefixStore.java b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/store/DistributedFpmPrefixStore.java
index f199671..bec99e1 100644
--- a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/store/DistributedFpmPrefixStore.java
+++ b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/store/DistributedFpmPrefixStore.java
@@ -43,8 +43,13 @@
 /**
  * Persistent Fpm Prefix Store with Listener.
  */
-@Component(immediate = true, service = DhcpFpmPrefixStore.class)
-//@Property(name = "fpm_type", value = "DHCP")
+@Component(
+    immediate = true,
+    service = DhcpFpmPrefixStore.class,
+    property = {
+        "fpm_type=DHCP"
+    }
+)
 public class DistributedFpmPrefixStore implements DhcpFpmPrefixStore {
 
     private static final KryoNamespace APP_KRYO = KryoNamespace.newBuilder()
