diff --git a/core/api/src/main/java/org/onosproject/net/config/NetworkConfigService.java b/core/api/src/main/java/org/onosproject/net/config/NetworkConfigService.java
index c1eed98..8eb69a45 100644
--- a/core/api/src/main/java/org/onosproject/net/config/NetworkConfigService.java
+++ b/core/api/src/main/java/org/onosproject/net/config/NetworkConfigService.java
@@ -41,27 +41,27 @@
     /**
      * Returns the subject factory with the specified key.
      *
-     * @param subjectKey subject class key
+     * @param subjectClassKey subject class key
      * @return subject class
      */
-    SubjectFactory getSubjectFactory(String subjectKey);
+    SubjectFactory getSubjectFactory(String subjectClassKey);
 
     /**
      * Returns the subject factory for the specified class.
      *
      * @param subjectClass subject class
-     * @return subject class key
+     * @return subject class factory
      */
     SubjectFactory getSubjectFactory(Class subjectClass);
 
     /**
      * Returns the configuration class with the specified key.
      *
-     * @param subjectKey subject class key
-     * @param configKey  subject class name
+     * @param subjectClassKey subject class key
+     * @param configKey       subject class name
      * @return subject class
      */
-    Class<? extends Config> getConfigClass(String subjectKey, String configKey);
+    Class<? extends Config> getConfigClass(String subjectClassKey, String configKey);
 
     /**
      * Returns the set of subjects for which some configuration is available.
diff --git a/core/api/src/main/java/org/onosproject/net/config/SubjectFactory.java b/core/api/src/main/java/org/onosproject/net/config/SubjectFactory.java
index cd2db34..f992d72 100644
--- a/core/api/src/main/java/org/onosproject/net/config/SubjectFactory.java
+++ b/core/api/src/main/java/org/onosproject/net/config/SubjectFactory.java
@@ -28,7 +28,7 @@
 public abstract class SubjectFactory<S> {
 
     private final Class<S> subjectClass;
-    private final String subjectKey;
+    private final String subjectClassKey;
 
     /**
      * Creates a new configuration factory for the specified class of subjects
@@ -36,12 +36,12 @@
      * subject and configuration class keys are used merely as keys for use in
      * composite JSON trees.
      *
-     * @param subjectClass subject class
-     * @param subjectKey   subject class key
+     * @param subjectClass    subject class
+     * @param subjectClassKey subject class key
      */
-    protected SubjectFactory(Class<S> subjectClass, String subjectKey) {
+    protected SubjectFactory(Class<S> subjectClass, String subjectClassKey) {
         this.subjectClass = subjectClass;
-        this.subjectKey = subjectKey;
+        this.subjectClassKey = subjectClassKey;
     }
 
     /**
@@ -60,8 +60,20 @@
      *
      * @return configuration key
      */
-    public String subjectKey() {
-        return subjectKey;
+    public String subjectClassKey() {
+        return subjectClassKey;
+    }
+
+    /**
+     * Returns the unique key of the specified configuration subject.
+     * This is primarily aimed for use in composite JSON trees in external
+     * representations and has no bearing on the internal behaviours.
+     *
+     * @param subject specific subject
+     * @return subject key
+     */
+    public String subjectKey(S subject) {
+        return subject.toString();
     }
 
     /**
diff --git a/core/api/src/main/java/org/onosproject/net/config/basics/SubjectFactories.java b/core/api/src/main/java/org/onosproject/net/config/basics/SubjectFactories.java
index 884f2e2..311566b 100644
--- a/core/api/src/main/java/org/onosproject/net/config/basics/SubjectFactories.java
+++ b/core/api/src/main/java/org/onosproject/net/config/basics/SubjectFactories.java
@@ -43,6 +43,10 @@
                 public ApplicationId createSubject(String key) {
                     return coreService.registerApplication(key);
                 }
+                @Override
+                public String subjectKey(ApplicationId subject) {
+                    return subject.name();
+                }
             };
 
     public static final SubjectFactory<DeviceId> DEVICE_SUBJECT_FACTORY =
@@ -59,6 +63,10 @@
                 public ConnectPoint createSubject(String key) {
                     return ConnectPoint.deviceConnectPoint(key);
                 }
+                @Override
+                public String subjectKey(ConnectPoint subject) {
+                    return key(subject);
+                }
             };
 
     public static final SubjectFactory<HostId> HOST_SUBJECT_FACTORY =
@@ -78,6 +86,10 @@
                     return LinkKey.linkKey(ConnectPoint.deviceConnectPoint(cps[0]),
                                            ConnectPoint.deviceConnectPoint(cps[1]));
                 }
+                @Override
+                public String subjectKey(LinkKey subject) {
+                    return key(subject.src()) + "-" + key(subject.dst());
+                }
             };
 
     /**
@@ -90,4 +102,8 @@
         coreService = service;
     }
 
+    private static String key(ConnectPoint subject) {
+        return subject.deviceId() + "/" + subject.port();
+    }
+
 }
diff --git a/core/api/src/test/java/org/onosproject/net/config/NetworkConfigServiceAdapter.java b/core/api/src/test/java/org/onosproject/net/config/NetworkConfigServiceAdapter.java
index b70d14e..7307258 100644
--- a/core/api/src/test/java/org/onosproject/net/config/NetworkConfigServiceAdapter.java
+++ b/core/api/src/test/java/org/onosproject/net/config/NetworkConfigServiceAdapter.java
@@ -29,7 +29,7 @@
     }
 
     @Override
-    public SubjectFactory getSubjectFactory(String subjectKey) {
+    public SubjectFactory getSubjectFactory(String subjectClassKey) {
         return null;
     }
 
@@ -39,7 +39,7 @@
     }
 
     @Override
-    public Class<? extends Config> getConfigClass(String subjectKey, String configKey) {
+    public Class<? extends Config> getConfigClass(String subjectClassKey, String configKey) {
         return null;
     }
 
