diff --git a/apps/calendar/src/main/java/org/onosproject/calendar/BandwidthCalendarResource.java b/apps/calendar/src/main/java/org/onosproject/calendar/BandwidthCalendarResource.java
index 2e73a87..9d457b7 100644
--- a/apps/calendar/src/main/java/org/onosproject/calendar/BandwidthCalendarResource.java
+++ b/apps/calendar/src/main/java/org/onosproject/calendar/BandwidthCalendarResource.java
@@ -23,7 +23,6 @@
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.intent.Intent;
 import org.onosproject.net.intent.IntentEvent;
-import org.onosproject.net.intent.IntentId;
 import org.onosproject.net.intent.IntentListener;
 import org.onosproject.net.intent.IntentService;
 import org.onosproject.net.intent.IntentState;
@@ -108,12 +107,15 @@
     public Response withdrawIntent(@PathParam("intentId") String intentId) {
         log.info("Receiving Teardown request for {}", intentId);
         IntentService service = get(IntentService.class);
+        // TODO: there needs to be an app id and key here
+        /*
         Intent intent = service.getIntent(IntentId.valueOf(Long.parseLong(intentId)));
         if (intent != null) {
             service.withdraw(intent);
             String reply = "ok\n";
             return Response.ok(reply).build();
         }
+        */
         return Response.status(Response.Status.NOT_FOUND).build();
     }
 
@@ -163,7 +165,7 @@
         @Override
         public void event(IntentEvent event) {
             if (event.subject().equals(intent)) {
-                state = service.getIntentState(intent.id());
+                state = service.getIntentState(intent.key());
                 if (state == INSTALLED || state == FAILED || state == WITHDRAWN) {
                     latch.countDown();
                 }
diff --git a/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java b/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java
index 3c134fb..fc33693 100644
--- a/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java
+++ b/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java
@@ -100,7 +100,7 @@
         inStatusTportMap.clear();
         outStatusTportMap.clear();
         for (Intent intent : intentService.getIntents()) {
-            if (intentService.getIntentState(intent.id()) == INSTALLED) {
+            if (intentService.getIntentState(intent.key()) == INSTALLED) {
                 if (intent instanceof OpticalConnectivityIntent) {
                     inStatusTportMap.put(((OpticalConnectivityIntent) intent).getSrc(),
                             (OpticalConnectivityIntent) intent);
@@ -177,7 +177,7 @@
             // TODO change the coordination approach between packet intents and optical intents
             // Low speed LLDP may cause multiple calls which are not expected
 
-            if (!IntentState.FAILED.equals(intentService.getIntentState(intent.id()))) {
+            if (!IntentState.FAILED.equals(intentService.getIntentState(intent.key()))) {
                    return;
              }
 
diff --git a/apps/sdnip/src/main/java/org/onosproject/sdnip/IntentSynchronizer.java b/apps/sdnip/src/main/java/org/onosproject/sdnip/IntentSynchronizer.java
index c51d7d3..ff9b786 100644
--- a/apps/sdnip/src/main/java/org/onosproject/sdnip/IntentSynchronizer.java
+++ b/apps/sdnip/src/main/java/org/onosproject/sdnip/IntentSynchronizer.java
@@ -579,7 +579,7 @@
             }
 
             IntentState state =
-                intentService.getIntentState(fetchedIntent.id());
+                intentService.getIntentState(fetchedIntent.key());
             if (state == null ||
                 state == IntentState.WITHDRAWING ||
                 state == IntentState.WITHDRAWN) {
@@ -601,7 +601,7 @@
             }
 
             IntentState state =
-                intentService.getIntentState(fetchedIntent.id());
+                intentService.getIntentState(fetchedIntent.key());
             if (state == null ||
                 state == IntentState.WITHDRAWING ||
                 state == IntentState.WITHDRAWN) {
diff --git a/apps/sdnip/src/test/java/org/onosproject/sdnip/IntentSyncTest.java b/apps/sdnip/src/test/java/org/onosproject/sdnip/IntentSyncTest.java
index b92b093..1af0914 100644
--- a/apps/sdnip/src/test/java/org/onosproject/sdnip/IntentSyncTest.java
+++ b/apps/sdnip/src/test/java/org/onosproject/sdnip/IntentSyncTest.java
@@ -535,19 +535,19 @@
         reset(intentService);
         Set<Intent> intents = new HashSet<Intent>();
         intents.add(intent1);
-        expect(intentService.getIntentState(intent1.id()))
+        expect(intentService.getIntentState(intent1.key()))
                 .andReturn(IntentState.INSTALLED).anyTimes();
         intents.add(intent2);
-        expect(intentService.getIntentState(intent2.id()))
+        expect(intentService.getIntentState(intent2.key()))
                 .andReturn(IntentState.INSTALLED).anyTimes();
         intents.add(intent4);
-        expect(intentService.getIntentState(intent4.id()))
+        expect(intentService.getIntentState(intent4.key()))
                 .andReturn(IntentState.INSTALLED).anyTimes();
         intents.add(intent5);
-        expect(intentService.getIntentState(intent5.id()))
+        expect(intentService.getIntentState(intent5.key()))
                 .andReturn(IntentState.INSTALLED).anyTimes();
         intents.add(intent7);
-        expect(intentService.getIntentState(intent7.id()))
+        expect(intentService.getIntentState(intent7.key()))
                 .andReturn(IntentState.WITHDRAWING).anyTimes();
         expect(intentService.getIntents()).andReturn(intents).anyTimes();
 
diff --git a/cli/src/main/java/org/onosproject/cli/net/IntentIdCompleter.java b/cli/src/main/java/org/onosproject/cli/net/IntentIdCompleter.java
index 7c5a480..4e418b7 100644
--- a/cli/src/main/java/org/onosproject/cli/net/IntentIdCompleter.java
+++ b/cli/src/main/java/org/onosproject/cli/net/IntentIdCompleter.java
@@ -39,7 +39,7 @@
         Iterator<Intent> it = service.getIntents().iterator();
         SortedSet<String> strings = delegate.getStrings();
         while (it.hasNext()) {
-            strings.add(it.next().id().toString());
+            strings.add(it.next().key().toString());
         }
 
         // Now let the completer do the work for figuring out what to offer.
diff --git a/cli/src/main/java/org/onosproject/cli/net/IntentRemoveCommand.java b/cli/src/main/java/org/onosproject/cli/net/IntentRemoveCommand.java
index 2350f05..3b05b7e 100644
--- a/cli/src/main/java/org/onosproject/cli/net/IntentRemoveCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/IntentRemoveCommand.java
@@ -19,8 +19,8 @@
 import org.apache.karaf.shell.commands.Command;
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.net.intent.Intent;
-import org.onosproject.net.intent.IntentId;
 import org.onosproject.net.intent.IntentService;
+import org.onosproject.net.intent.Key;
 
 import java.math.BigInteger;
 
@@ -43,8 +43,8 @@
             id = id.replaceFirst("0x", "");
         }
 
-        IntentId intentId = IntentId.valueOf(new BigInteger(id, 16).longValue());
-        Intent intent = service.getIntent(intentId);
+        Key key = Key.of(new BigInteger(id, 16).longValue(), appId());
+        Intent intent = service.getIntent(key);
         if (intent != null) {
             service.withdraw(intent);
         }
diff --git a/cli/src/main/java/org/onosproject/cli/net/IntentsListCommand.java b/cli/src/main/java/org/onosproject/cli/net/IntentsListCommand.java
index 992c528..cdae9b5 100644
--- a/cli/src/main/java/org/onosproject/cli/net/IntentsListCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/IntentsListCommand.java
@@ -76,7 +76,7 @@
             print("%s", json(service, service.getIntents()));
         } else {
             for (Intent intent : service.getIntents()) {
-                IntentState state = service.getIntentState(intent.id());
+                IntentState state = service.getIntentState(intent.key());
                 if (state != null) {
                     print("id=%s, state=%s, type=%s, appId=%s",
                           intent.id(), state, intent.getClass().getSimpleName(),
@@ -130,7 +130,7 @@
 
             // Collect the summary for each intent type intents
             for (Intent intent : intents) {
-                IntentState intentState = service.getIntentState(intent.id());
+                IntentState intentState = service.getIntentState(intent.key());
                 if (intentState == null) {
                     continue;
                 }
@@ -365,7 +365,7 @@
             print("    egress=%s", li.egressPoints());
         }
 
-        List<Intent> installable = service.getInstallableIntents(intent.id());
+        List<Intent> installable = service.getInstallableIntents(intent.key());
         if (showInstallable && installable != null && !installable.isEmpty()) {
             print("    installable=%s", installable);
         }
@@ -387,7 +387,7 @@
                 .put("type", intent.getClass().getSimpleName())
                 .put("appId", intent.appId().name());
 
-        IntentState state = service.getIntentState(intent.id());
+        IntentState state = service.getIntentState(intent.key());
         if (state != null) {
             result.put("state", state.toString());
         }
@@ -438,7 +438,7 @@
             result.set("links", LinksListCommand.json(li.links()));
         }
 
-        List<Intent> installable = service.getInstallableIntents(intent.id());
+        List<Intent> installable = service.getInstallableIntents(intent.key());
         if (installable != null && !installable.isEmpty()) {
             result.set("installable", json(service, installable));
         }
diff --git a/cli/src/main/java/org/onosproject/cli/net/WipeOutCommand.java b/cli/src/main/java/org/onosproject/cli/net/WipeOutCommand.java
index 3262fb9..b2bba9a 100644
--- a/cli/src/main/java/org/onosproject/cli/net/WipeOutCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/WipeOutCommand.java
@@ -64,7 +64,7 @@
         print("Wiping intents");
         IntentService intentService = get(IntentService.class);
         for (Intent intent : intentService.getIntents()) {
-            if (intentService.getIntentState(intent.id()) == IntentState.INSTALLED) {
+            if (intentService.getIntentState(intent.key()) == IntentState.INSTALLED) {
                 intentService.withdraw(intent);
             }
         }
diff --git a/core/api/src/main/java/org/onosproject/net/intent/IntentService.java b/core/api/src/main/java/org/onosproject/net/intent/IntentService.java
index 20a06fa..2db280f 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/IntentService.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/IntentService.java
@@ -43,6 +43,14 @@
     void withdraw(Intent intent);
 
     /**
+     * Fetches an intent based on its key.
+     *
+     * @param key key of the intent
+     * @return intent object if the key is found, null otherwise
+     */
+    public Intent getIntent(Key key);
+
+    /**
      * Returns an iterable of intents currently in the system.
      *
      * @return set of intents
@@ -57,30 +65,22 @@
     long getIntentCount();
 
     /**
-     * Retrieves the intent specified by its identifier.
-     *
-     * @param id intent identifier
-     * @return the intent or null if one with the given identifier is not found
-     */
-    Intent getIntent(IntentId id);
-
-    /**
      * Retrieves the state of an intent by its identifier.
      *
-     * @param id intent identifier
+     * @param intentKey intent identifier
      * @return the intent state or null if one with the given identifier is not
      * found
      */
-    IntentState getIntentState(IntentId id);
+    IntentState getIntentState(Key intentKey);
 
     /**
      * Returns the list of the installable events associated with the specified
      * top-level intent.
      *
-     * @param intentId top-level intent identifier
+     * @param intentKey top-level intent identifier
      * @return compiled installable intents
      */
-    List<Intent> getInstallableIntents(IntentId intentId);
+    List<Intent> getInstallableIntents(Key intentKey);
 
     /**
      * Adds the specified listener for intent events.
diff --git a/core/api/src/main/java/org/onosproject/net/intent/IntentStore.java b/core/api/src/main/java/org/onosproject/net/intent/IntentStore.java
index e5942f1..ceb5493 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/IntentStore.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/IntentStore.java
@@ -40,37 +40,24 @@
     Iterable<Intent> getIntents();
 
     /**
-     * Returns the intent with the specified identifier.
-     *
-     * @param intentId intent identification
-     * @return intent or null if not found
-     */
-    @Deprecated
-    default Intent getIntent(IntentId intentId) {
-        throw new UnsupportedOperationException("deprecated");
-    }
-
-    /**
      * Returns the state of the specified intent.
      *
-     * @param intentId intent identification
+     * @param intentKey intent identification
      * @return current intent state
      */
-    @Deprecated
-    default IntentState getIntentState(IntentId intentId) {
-        throw new UnsupportedOperationException("deprecated");
+    default IntentState getIntentState(Key intentKey) {
+        return null;
     }
 
     /**
      * Returns the list of the installable events associated with the specified
      * original intent.
      *
-     * @param intentId original intent identifier
+     * @param intentKey original intent identifier
      * @return compiled installable intents
      */
-    @Deprecated
-    default List<Intent> getInstallableIntents(IntentId intentId) {
-        throw new UnsupportedOperationException("deprecated");
+    default List<Intent> getInstallableIntents(Key intentKey) {
+        throw new UnsupportedOperationException("getInstallableIntents()");
     }
 
     /**
@@ -92,7 +79,8 @@
      * @param key key
      * @return intent or null if not found
      */
-    default Intent getIntent(Key key) { //FIXME remove when impl.
+    default Intent getIntent(Key key) {
+        // FIXME remove this default implementation when all stores have implemented it
         return null;
     }
 
diff --git a/core/api/src/test/java/org/onosproject/net/intent/FakeIntentManager.java b/core/api/src/test/java/org/onosproject/net/intent/FakeIntentManager.java
index 4cdb674..c1b7886 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/FakeIntentManager.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/FakeIntentManager.java
@@ -196,18 +196,18 @@
     }
 
     @Override
-    public Intent getIntent(IntentId id) {
-        return intents.get(id);
+    public Intent getIntent(Key intentKey) {
+        return intents.get(intentKey);
     }
 
     @Override
-    public IntentState getIntentState(IntentId id) {
-        return intentStates.get(id);
+    public IntentState getIntentState(Key intentKey) {
+        return intentStates.get(intentKey);
     }
 
     @Override
-    public List<Intent> getInstallableIntents(IntentId intentId) {
-        return installables.get(intentId);
+    public List<Intent> getInstallableIntents(Key intentKey) {
+        return installables.get(intentKey);
     }
 
     @Override
diff --git a/core/api/src/test/java/org/onosproject/net/intent/IntentServiceAdapter.java b/core/api/src/test/java/org/onosproject/net/intent/IntentServiceAdapter.java
index 9441fa4..d600dde 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/IntentServiceAdapter.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/IntentServiceAdapter.java
@@ -43,17 +43,17 @@
     }
 
     @Override
-    public Intent getIntent(IntentId id) {
+    public Intent getIntent(Key intentKey) {
         return null;
     }
 
     @Override
-    public IntentState getIntentState(IntentId id) {
+    public IntentState getIntentState(Key intentKey) {
         return null;
     }
 
     @Override
-    public List<Intent> getInstallableIntents(IntentId intentId) {
+    public List<Intent> getInstallableIntents(Key intentKey) {
         return null;
     }
 
diff --git a/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java b/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java
index 9dce4f1..7ae00aa 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java
@@ -91,7 +91,7 @@
             @Override
             public void run() {
                 assertEquals("incorrect intent state", IntentState.INSTALLED,
-                             service.getIntentState(intent.id()));
+                             service.getIntentState(intent.key()));
             }
         });
 
@@ -112,7 +112,7 @@
             @Override
             public void run() {
                 assertEquals("incorrect intent state", IntentState.WITHDRAWN,
-                             service.getIntentState(intent.id()));
+                             service.getIntentState(intent.key()));
             }
         });
 
@@ -140,7 +140,7 @@
             @Override
             public void run() {
                 assertEquals("incorrect intent state", IntentState.FAILED,
-                             service.getIntentState(intent.id()));
+                             service.getIntentState(intent.key()));
             }
         });
 
@@ -163,7 +163,7 @@
             @Override
             public void run() {
                 assertEquals("incorrect intent state", IntentState.FAILED,
-                             service.getIntentState(intent.id()));
+                             service.getIntentState(intent.key()));
             }
         });
 
@@ -255,7 +255,7 @@
             @Override
             public void run() {
                 assertEquals("incorrect intent state", IntentState.INSTALLED,
-                             service.getIntentState(intent.id()));
+                             service.getIntentState(intent.key()));
             }
         });
 
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 3603a50..a0cc741 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
@@ -40,13 +40,13 @@
 import org.onosproject.net.intent.IntentEvent;
 import org.onosproject.net.intent.IntentException;
 import org.onosproject.net.intent.IntentExtensionService;
-import org.onosproject.net.intent.IntentId;
 import org.onosproject.net.intent.IntentInstaller;
 import org.onosproject.net.intent.IntentListener;
 import org.onosproject.net.intent.IntentService;
 import org.onosproject.net.intent.IntentState;
 import org.onosproject.net.intent.IntentStore;
 import org.onosproject.net.intent.IntentStoreDelegate;
+import org.onosproject.net.intent.Key;
 import org.slf4j.Logger;
 
 import java.util.ArrayList;
@@ -81,7 +81,7 @@
     private static final Logger log = getLogger(IntentManager.class);
 
     public static final String INTENT_NULL = "Intent cannot be null";
-    public static final String INTENT_ID_NULL = "Intent ID cannot be null";
+    public static final String INTENT_ID_NULL = "Intent key cannot be null";
 
     private static final int NUM_THREADS = 12;
 
@@ -163,6 +163,11 @@
     }
 
     @Override
+    public Intent getIntent(Key key) {
+        return store.getIntent(key);
+    }
+
+    @Override
     public Iterable<Intent> getIntents() {
         return store.getIntents();
     }
@@ -173,21 +178,15 @@
     }
 
     @Override
-    public Intent getIntent(IntentId id) {
-        checkNotNull(id, INTENT_ID_NULL);
-        return store.getIntent(id);
+    public IntentState getIntentState(Key intentKey) {
+        checkNotNull(intentKey, INTENT_ID_NULL);
+        return store.getIntentState(intentKey);
     }
 
     @Override
-    public IntentState getIntentState(IntentId id) {
-        checkNotNull(id, INTENT_ID_NULL);
-        return store.getIntentState(id);
-    }
-
-    @Override
-    public List<Intent> getInstallableIntents(IntentId intentId) {
-        checkNotNull(intentId, INTENT_ID_NULL);
-        return store.getInstallableIntents(intentId);
+    public List<Intent> getInstallableIntents(Key intentKey) {
+        checkNotNull(intentKey, INTENT_ID_NULL);
+        return store.getInstallableIntents(intentKey);
     }
 
     @Override
@@ -446,11 +445,11 @@
         }
     }
 
-    private void buildAndSubmitBatches(Iterable<IntentId> intentIds,
+    private void buildAndSubmitBatches(Iterable<Key> intentKeys,
                                        boolean compileAllFailed) {
         // Attempt recompilation of the specified intents first.
-        for (IntentId id : intentIds) {
-            Intent intent = store.getIntent(id);
+        for (Key key : intentKeys) {
+            Intent intent = store.getIntent(key);
             if (intent == null) {
                 continue;
             }
@@ -460,7 +459,7 @@
         if (compileAllFailed) {
             // If required, compile all currently failed intents.
             for (Intent intent : getIntents()) {
-                IntentState state = getIntentState(intent.id());
+                IntentState state = getIntentState(intent.key());
                 if (RECOMPILE.contains(state)) {
                     if (state == WITHDRAW_REQ) {
                         withdraw(intent);
@@ -482,9 +481,9 @@
     // Topology change delegate
     private class InternalTopoChangeDelegate implements TopologyChangeDelegate {
         @Override
-        public void triggerCompile(Iterable<IntentId> intentIds,
+        public void triggerCompile(Iterable<Key> intentKeys,
                                    boolean compileAllFailed) {
-            buildAndSubmitBatches(intentIds, compileAllFailed);
+            buildAndSubmitBatches(intentKeys, compileAllFailed);
         }
     }
 
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/ObjectiveTracker.java b/core/net/src/main/java/org/onosproject/net/intent/impl/ObjectiveTracker.java
index aabcc28..3c7b733 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/ObjectiveTracker.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/ObjectiveTracker.java
@@ -29,8 +29,8 @@
 import org.onosproject.net.Link;
 import org.onosproject.net.LinkKey;
 import org.onosproject.net.NetworkResource;
-import org.onosproject.net.intent.IntentId;
 import org.onosproject.net.intent.IntentService;
+import org.onosproject.net.intent.Key;
 import org.onosproject.net.link.LinkEvent;
 import org.onosproject.net.resource.LinkResourceEvent;
 import org.onosproject.net.resource.LinkResourceListener;
@@ -65,8 +65,8 @@
 
     private final Logger log = getLogger(getClass());
 
-    private final SetMultimap<LinkKey, IntentId> intentsByLink =
-            synchronizedSetMultimap(HashMultimap.<LinkKey, IntentId>create());
+    private final SetMultimap<LinkKey, Key> intentsByLink =
+            synchronizedSetMultimap(HashMultimap.<LinkKey, Key>create());
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected TopologyService topologyService;
@@ -126,21 +126,21 @@
     }
 
     @Override
-    public void addTrackedResources(IntentId intentId,
+    public void addTrackedResources(Key intentKey,
                                     Collection<NetworkResource> resources) {
         for (NetworkResource resource : resources) {
             if (resource instanceof Link) {
-                intentsByLink.put(linkKey((Link) resource), intentId);
+                intentsByLink.put(linkKey((Link) resource), intentKey);
             }
         }
     }
 
     @Override
-    public void removeTrackedResources(IntentId intentId,
+    public void removeTrackedResources(Key intentKey,
                                        Collection<NetworkResource> resources) {
         for (NetworkResource resource : resources) {
             if (resource instanceof Link) {
-                intentsByLink.remove(linkKey((Link) resource), intentId);
+                intentsByLink.remove(linkKey((Link) resource), intentKey);
             }
         }
     }
@@ -170,10 +170,10 @@
             }
 
             if (event.reasons() == null || event.reasons().isEmpty()) {
-                delegate.triggerCompile(new HashSet<IntentId>(), true);
+                delegate.triggerCompile(new HashSet<Key>(), true);
 
             } else {
-                Set<IntentId> toBeRecompiled = new HashSet<>();
+                Set<Key> toBeRecompiled = new HashSet<>();
                 boolean recompileOnly = true;
 
                 // Scan through the list of reasons and keep accruing all
@@ -186,9 +186,9 @@
                                         linkEvent.subject().isDurable())) {
                             final LinkKey linkKey = linkKey(linkEvent.subject());
                             synchronized (intentsByLink) {
-                                Set<IntentId> intentIds = intentsByLink.get(linkKey);
-                                log.debug("recompile triggered by LinkDown {} {}", linkKey, intentIds);
-                                toBeRecompiled.addAll(intentIds);
+                                Set<Key> intentKeys = intentsByLink.get(linkKey);
+                                log.debug("recompile triggered by LinkDown {} {}", linkKey, intentKeys);
+                                toBeRecompiled.addAll(intentKeys);
                             }
                         }
                         recompileOnly = recompileOnly &&
@@ -243,15 +243,15 @@
         }
         intentService.getIntents().forEach(intent -> {
             if (intent.appId().equals(appId)) {
-                IntentId id = intent.id();
+                Key key = intent.key();
                 Collection<NetworkResource> resources = Lists.newArrayList();
-                intentService.getInstallableIntents(id).stream()
+                intentService.getInstallableIntents(key).stream()
                         .map(installable -> installable.resources())
                         .forEach(resources::addAll);
                 if (track) {
-                    addTrackedResources(id, resources);
+                    addTrackedResources(key, resources);
                 } else {
-                    removeTrackedResources(id, resources);
+                    removeTrackedResources(key, resources);
                 }
             }
         });
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/ObjectiveTrackerService.java b/core/net/src/main/java/org/onosproject/net/intent/impl/ObjectiveTrackerService.java
index 404af9b..f1dfb94 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/ObjectiveTrackerService.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/ObjectiveTrackerService.java
@@ -15,11 +15,11 @@
  */
 package org.onosproject.net.intent.impl;
 
-import org.onosproject.net.NetworkResource;
-import org.onosproject.net.intent.IntentId;
-
 import java.util.Collection;
 
+import org.onosproject.net.NetworkResource;
+import org.onosproject.net.intent.Key;
+
 /**
  * Auxiliary service for tracking intent path flows and for notifying the
  * intent service of environment changes via topology change delegate.
@@ -43,19 +43,20 @@
     /**
      * Adds a path flow to be tracked.
      *
-     * @param intentId  intent identity on whose behalf the path is being tracked
+     * @param intentKey  intent identity on whose behalf the path is being tracked
      * @param resources resources to track
      */
-    public void addTrackedResources(IntentId intentId,
+    // TODO consider using the IntentData here rather than just the key
+    public void addTrackedResources(Key intentKey,
                                     Collection<NetworkResource> resources);
 
     /**
      * Removes a path flow to be tracked.
      *
-     * @param intentId  intent identity on whose behalf the path is being tracked
+     * @param intentKey  intent identity on whose behalf the path is being tracked
      * @param resources resources to stop tracking
      */
-    public void removeTrackedResources(IntentId intentId,
+    public void removeTrackedResources(Key intentKey,
                                        Collection<NetworkResource> resources);
 
 }
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/TopologyChangeDelegate.java b/core/net/src/main/java/org/onosproject/net/intent/impl/TopologyChangeDelegate.java
index 5eeb7c2..3cc0f2a 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/TopologyChangeDelegate.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/TopologyChangeDelegate.java
@@ -15,7 +15,7 @@
  */
 package org.onosproject.net.intent.impl;
 
-import org.onosproject.net.intent.IntentId;
+import org.onosproject.net.intent.Key;
 
 /**
  * Auxiliary delegate for integration of intent manager and flow trackerService.
@@ -32,6 +32,6 @@
      * @param compileAllFailed true implies full compile of all failed intents
      *                         is required; false for selective recompile only
      */
-    void triggerCompile(Iterable<IntentId> intentIds, boolean compileAllFailed);
+    void triggerCompile(Iterable<Key> intentIds, boolean compileAllFailed);
 
 }
diff --git a/core/net/src/test/java/org/onosproject/net/intent/impl/IntentManagerTest.java b/core/net/src/test/java/org/onosproject/net/intent/impl/IntentManagerTest.java
index c55c3e8..5ff9c99 100644
--- a/core/net/src/test/java/org/onosproject/net/intent/impl/IntentManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/intent/impl/IntentManagerTest.java
@@ -45,6 +45,7 @@
 import org.onosproject.net.intent.IntentService;
 import org.onosproject.net.intent.IntentState;
 import org.onosproject.net.intent.IntentTestsMocks;
+import org.onosproject.net.intent.Key;
 import org.onosproject.net.resource.LinkResourceAllocations;
 import org.onosproject.store.trivial.impl.SimpleIntentStore;
 
@@ -133,12 +134,12 @@
         }
 
         @Override
-        public void addTrackedResources(IntentId intentId, Collection<NetworkResource> resources) {
+        public void addTrackedResources(Key key, Collection<NetworkResource> resources) {
             //TODO
         }
 
         @Override
-        public void removeTrackedResources(IntentId intentId, Collection<NetworkResource> resources) {
+        public void removeTrackedResources(Key key, Collection<NetworkResource> resources) {
             //TODO
         }
     }
@@ -294,7 +295,7 @@
         // verify that all intents are parked and the batch operation is unblocked
         Set<IntentState> parked = Sets.newHashSet(INSTALLED, WITHDRAWN, FAILED);
         for (Intent i : service.getIntents()) {
-            IntentState state = service.getIntentState(i.id());
+            IntentState state = service.getIntentState(i.key());
             assertTrue("Intent " + i.id() + " is in invalid state " + state,
                        parked.contains(state));
         }
diff --git a/core/net/src/test/java/org/onosproject/net/intent/impl/ObjectiveTrackerTest.java b/core/net/src/test/java/org/onosproject/net/intent/impl/ObjectiveTrackerTest.java
index 02d206a..b324ae8 100644
--- a/core/net/src/test/java/org/onosproject/net/intent/impl/ObjectiveTrackerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/intent/impl/ObjectiveTrackerTest.java
@@ -32,7 +32,7 @@
 import org.onosproject.net.Link;
 import org.onosproject.net.NetworkResource;
 import org.onosproject.net.intent.Intent;
-import org.onosproject.net.intent.IntentId;
+import org.onosproject.net.intent.Key;
 import org.onosproject.net.intent.MockIdGenerator;
 import org.onosproject.net.link.LinkEvent;
 import org.onosproject.net.resource.LinkResourceEvent;
@@ -49,6 +49,7 @@
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.hasSize;
 import static org.hamcrest.Matchers.is;
+import static org.onosproject.net.NetTestTools.APP_ID;
 import static org.onosproject.net.NetTestTools.link;
 
 /**
@@ -99,13 +100,13 @@
     static class TestTopologyChangeDelegate implements TopologyChangeDelegate {
 
         CountDownLatch latch = new CountDownLatch(1);
-        List<IntentId> intentIdsFromEvent;
+        List<Key> intentIdsFromEvent;
         boolean compileAllFailedFromEvent;
 
         @Override
-        public void triggerCompile(Iterable<IntentId> intentIds,
+        public void triggerCompile(Iterable<Key> intentKeys,
                                    boolean compileAllFailed) {
-            intentIdsFromEvent = Lists.newArrayList(intentIds);
+            intentIdsFromEvent = Lists.newArrayList(intentKeys);
             compileAllFailedFromEvent = compileAllFailed;
             latch.countDown();
         }
@@ -199,9 +200,9 @@
                 topology,
                 reasons);
 
-        final IntentId intentId = IntentId.valueOf(0x333L);
+        final Key key = Key.of(0x333L, APP_ID);
         Collection<NetworkResource> resources = ImmutableSet.of(link);
-        tracker.addTrackedResources(intentId, resources);
+        tracker.addTrackedResources(key, resources);
 
         listener.event(event);
         assertThat(
diff --git a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/DistributedIntentStore.java b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/DistributedIntentStore.java
index ef3b803..0d8c02a 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/DistributedIntentStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/DistributedIntentStore.java
@@ -40,6 +40,7 @@
 import org.onosproject.net.intent.IntentState;
 import org.onosproject.net.intent.IntentStore;
 import org.onosproject.net.intent.IntentStoreDelegate;
+import org.onosproject.net.intent.Key;
 import org.onosproject.store.AbstractStore;
 import org.onosproject.store.serializers.KryoNamespaces;
 import org.onosproject.store.serializers.KryoSerializer;
@@ -202,6 +203,10 @@
     }
 
     @Override
+    public Intent getIntent(Key intentKey) {
+        return null;
+    }
+
     public Intent getIntent(IntentId intentId) {
         Context timer = startTimer(getIntentTimer);
         try {
@@ -212,7 +217,10 @@
     }
 
     @Override
-    public IntentState getIntentState(IntentId id) {
+    public IntentState getIntentState(Key key) {
+        // TODO: either implement this or remove the class
+        return IntentState.FAILED;
+        /*
         Context timer = startTimer(getIntentStateTimer);
         try {
             final IntentState localState = transientStates.get(id);
@@ -223,6 +231,7 @@
         } finally {
             stopTimer(timer);
         }
+        */
     }
 
     private void verify(boolean expression, String errorMessageTemplate, Object... errorMessageArgs) {
@@ -236,13 +245,17 @@
     }
 
     @Override
-    public List<Intent> getInstallableIntents(IntentId intentId) {
+    public List<Intent> getInstallableIntents(Key intentKey) {
+        // TODO: implement this or delete class
+        return null;
+        /*
         Context timer = startTimer(getInstallableIntentsTimer);
         try {
             return installable.get(intentId);
         } finally {
             stopTimer(timer);
         }
+        */
     }
 
     protected String strIntentId(IntentId key) {
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 f3917c9..051a01c 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
@@ -137,18 +137,29 @@
     }
 
     @Override
+    public Intent getIntent(Key intentKey) {
+        // TODO: Implement this
+        return null;
+    }
+
+
     public Intent getIntent(IntentId intentId) {
         return intents.get(intentId);
     }
 
     @Override
-    public IntentState getIntentState(IntentId intentId) {
-        return intentStates.get(intentId);
+    public IntentState getIntentState(Key intentKey) {
+        // TODO: implement this
+        return IntentState.FAILED;
     }
 
     @Override
-    public List<Intent> getInstallableIntents(IntentId intentId) {
+    public List<Intent> getInstallableIntents(Key intentKey) {
+        // TODO: implement this or delete class
+        return null;
+        /*
         return installables.get(intentId);
+        */
     }
 
     @Override
@@ -225,11 +236,6 @@
     }
 
     @Override
-    public Intent getIntent(Key key) {
-        return null; // TODO
-    }
-
-    @Override
     public IntentData getIntentData(Key key) {
         return null; // TODO
     }
diff --git a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/HazelcastIntentStore.java b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/HazelcastIntentStore.java
index 2e82e5c..8e91d61 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/HazelcastIntentStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/HazelcastIntentStore.java
@@ -46,6 +46,7 @@
 import org.onosproject.net.intent.IntentState;
 import org.onosproject.net.intent.IntentStore;
 import org.onosproject.net.intent.IntentStoreDelegate;
+import org.onosproject.net.intent.Key;
 import org.onosproject.store.hz.AbstractHazelcastStore;
 import org.onosproject.store.hz.SMap;
 import org.onosproject.store.serializers.KryoNamespaces;
@@ -209,6 +210,11 @@
     }
 
     @Override
+    public Intent getIntent(Key intentKey) {
+        return null;
+    }
+
+
     public Intent getIntent(IntentId intentId) {
         Context timer = startTimer(getIntentTimer);
         try {
@@ -227,7 +233,10 @@
     }
 
     @Override
-    public IntentState getIntentState(IntentId id) {
+    public IntentState getIntentState(Key key) {
+        // TODO: either implement this or remove this class
+        return IntentState.FAILED;
+        /*
         Context timer = startTimer(getIntentStateTimer);
         try {
             final IntentState localState = transientStates.get(id);
@@ -238,6 +247,7 @@
         } finally {
             stopTimer(timer);
         }
+        */
     }
 
     private void verify(boolean expression, String errorMessageTemplate, Object... errorMessageArgs) {
@@ -251,13 +261,18 @@
     }
 
     @Override
-    public List<Intent> getInstallableIntents(IntentId intentId) {
+    public List<Intent> getInstallableIntents(Key intentKey) {
+        // TODO: implement this or delete class
+        return null;
+
+        /*
         Context timer = startTimer(getInstallableIntentsTimer);
         try {
             return installable.get(intentId);
         } finally {
             stopTimer(timer);
         }
+        */
     }
 
     @Override
diff --git a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/SimpleIntentStore.java b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/SimpleIntentStore.java
index f3ecb48..0d9f26e 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/SimpleIntentStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/SimpleIntentStore.java
@@ -25,7 +25,6 @@
 import org.onosproject.net.intent.Intent;
 import org.onosproject.net.intent.IntentData;
 import org.onosproject.net.intent.IntentEvent;
-import org.onosproject.net.intent.IntentId;
 import org.onosproject.net.intent.IntentState;
 import org.onosproject.net.intent.IntentStore;
 import org.onosproject.net.intent.IntentStoreDelegate;
@@ -35,7 +34,6 @@
 
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
 import java.util.stream.Collectors;
 
 import static com.google.common.base.Preconditions.checkNotNull;
@@ -77,38 +75,23 @@
     }
 
     @Override
-    public Intent getIntent(IntentId intentId) {
-        for (IntentData data : current.values()) {
-            if (Objects.equals(data.intent().id(), intentId)) {
-                return data.intent();
-            }
-        }
-        return null;
+    public IntentState getIntentState(Key intentKey) {
+        IntentData data = current.get(intentKey);
+        return (data != null) ? data.state() : null;
     }
 
     @Override
-    public IntentState getIntentState(IntentId intentId) {
-        for (IntentData data : current.values()) {
-            if (Objects.equals(data.intent().id(), intentId)) {
-                return data.state();
-            }
-        }
+    public List<Intent> getInstallableIntents(Key intentKey) {
+        // TODO: implement this or delete class
         return null;
-    }
-
-    @Override
-    public List<Intent> getInstallableIntents(IntentId intentId) {
+        /*
         for (IntentData data : current.values()) {
             if (Objects.equals(data.intent().id(), intentId)) {
                 return data.installables();
             }
         }
         return null;
-    }
-
-    @Override
-    public IntentData getIntentData(Key key) {
-        return current.get(key);
+        */
     }
 
     /*
diff --git a/core/store/trivial/src/main/java/org/onosproject/store/trivial/impl/SimpleIntentStore.java b/core/store/trivial/src/main/java/org/onosproject/store/trivial/impl/SimpleIntentStore.java
index 988d02a..2831951 100644
--- a/core/store/trivial/src/main/java/org/onosproject/store/trivial/impl/SimpleIntentStore.java
+++ b/core/store/trivial/src/main/java/org/onosproject/store/trivial/impl/SimpleIntentStore.java
@@ -25,7 +25,6 @@
 import org.onosproject.net.intent.Intent;
 import org.onosproject.net.intent.IntentData;
 import org.onosproject.net.intent.IntentEvent;
-import org.onosproject.net.intent.IntentId;
 import org.onosproject.net.intent.IntentState;
 import org.onosproject.net.intent.IntentStore;
 import org.onosproject.net.intent.IntentStoreDelegate;
@@ -35,7 +34,6 @@
 
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
 import java.util.stream.Collectors;
 
 import static com.google.common.base.Preconditions.checkNotNull;
@@ -76,38 +74,15 @@
     }
 
     @Override
-    public Intent getIntent(IntentId intentId) {
-        for (IntentData data : current.values()) {
-            if (Objects.equals(data.intent().id(), intentId)) {
-                return data.intent();
-            }
-        }
-        return null;
+    public IntentState getIntentState(Key intentKey) {
+        IntentData data = current.get(intentKey);
+        return (data != null) ? data.state() : null;
     }
 
     @Override
-    public IntentState getIntentState(IntentId intentId) {
-        for (IntentData data : current.values()) {
-            if (Objects.equals(data.intent().id(), intentId)) {
-                return data.state();
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public List<Intent> getInstallableIntents(IntentId intentId) {
-        for (IntentData data : current.values()) {
-            if (Objects.equals(data.intent().id(), intentId)) {
-                return data.installables();
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public IntentData getIntentData(Key key) {
-        return current.get(key);
+    public List<Intent> getInstallableIntents(Key intentKey) {
+        IntentData data = current.get(intentKey);
+        return (data != null) ? data.installables() : null;
     }
 
     /*
diff --git a/web/api/src/main/java/org/onosproject/rest/IntentsWebResource.java b/web/api/src/main/java/org/onosproject/rest/IntentsWebResource.java
index 75287e0..3e20c5d 100644
--- a/web/api/src/main/java/org/onosproject/rest/IntentsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/IntentsWebResource.java
@@ -24,8 +24,8 @@
 
 import org.onosproject.net.intent.HostToHostIntent;
 import org.onosproject.net.intent.Intent;
-import org.onosproject.net.intent.IntentId;
 import org.onosproject.net.intent.IntentService;
+import org.onosproject.net.intent.Key;
 import org.onosproject.net.intent.PointToPointIntent;
 
 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -54,15 +54,15 @@
     /**
      * Gets a single intent by Id.
      *
-     * @param id Id to look up
+     * @param key Id to look up
      * @return intent data
      */
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     @Path("{id}")
-    public Response getIntentById(@PathParam("id") long id) {
+    public Response getIntentById(@PathParam("id") String key) {
         final Intent intent = nullIsNotFound(get(IntentService.class)
-                        .getIntent(IntentId.valueOf(id)),
+                        .getIntent(Key.of(key, null)),
                 INTENT_NOT_FOUND);
         final ObjectNode root;
         if (intent instanceof HostToHostIntent) {
diff --git a/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java
index 3289c87..35a15d5 100644
--- a/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java
@@ -35,8 +35,8 @@
 import org.onosproject.core.IdGenerator;
 import org.onosproject.net.NetworkResource;
 import org.onosproject.net.intent.Intent;
-import org.onosproject.net.intent.IntentId;
 import org.onosproject.net.intent.IntentService;
+import org.onosproject.net.intent.Key;
 
 import com.eclipsesource.json.JsonArray;
 import com.eclipsesource.json.JsonObject;
@@ -339,7 +339,7 @@
 
         intents.add(intent);
 
-        expect(mockIntentService.getIntent(IntentId.valueOf(0)))
+        expect(mockIntentService.getIntent(Key.of(0, APP_ID)))
                 .andReturn(intent)
                 .anyTimes();
         replay(mockIntentService);
@@ -356,7 +356,7 @@
     @Test
     public void testBadGet() {
 
-        expect(mockIntentService.getIntent(IntentId.valueOf(0)))
+        expect(mockIntentService.getIntent(Key.of(0, APP_ID)))
                 .andReturn(null)
                 .anyTimes();
         replay(mockIntentService);
diff --git a/web/gui/src/main/java/org/onosproject/gui/TopologyViewIntentFilter.java b/web/gui/src/main/java/org/onosproject/gui/TopologyViewIntentFilter.java
index 24a9327..0549604 100644
--- a/web/gui/src/main/java/org/onosproject/gui/TopologyViewIntentFilter.java
+++ b/web/gui/src/main/java/org/onosproject/gui/TopologyViewIntentFilter.java
@@ -110,7 +110,7 @@
 
         // Search through all intents and see if they are relevant to our search.
         for (Intent intent : sourceIntents) {
-            if (intentService.getIntentState(intent.id()) == INSTALLED) {
+            if (intentService.getIntentState(intent.key()) == INSTALLED) {
                 boolean isRelevant = false;
                 if (intent instanceof HostToHostIntent) {
                     isRelevant = isIntentRelevantToHosts((HostToHostIntent) intent, hosts) &&
@@ -157,7 +157,7 @@
 
     // Indicates whether the specified intent involves all of the given devices.
     private boolean isIntentRelevantToDevices(Intent intent, Iterable<Device> devices) {
-        List<Intent> installables = intentService.getInstallableIntents(intent.id());
+        List<Intent> installables = intentService.getInstallableIntents(intent.key());
         for (Device device : devices) {
             if (!isIntentRelevantToDevice(installables, device)) {
                 return false;
@@ -228,7 +228,7 @@
         Link ccDst = getFirstLink(opticalIntent.getDst(), true);
 
         for (Intent intent : intents) {
-            List<Intent> installables = intentService.getInstallableIntents(intent.id());
+            List<Intent> installables = intentService.getInstallableIntents(intent.key());
             for (Intent installable : installables) {
                 if (installable instanceof PathIntent) {
                     List<Link> links = ((PathIntent) installable).path().links();
diff --git a/web/gui/src/main/java/org/onosproject/gui/TopologyViewMessages.java b/web/gui/src/main/java/org/onosproject/gui/TopologyViewMessages.java
index 599881c..746c37e 100644
--- a/web/gui/src/main/java/org/onosproject/gui/TopologyViewMessages.java
+++ b/web/gui/src/main/java/org/onosproject/gui/TopologyViewMessages.java
@@ -672,7 +672,7 @@
         for (TrafficClass trafficClass : trafficClasses) {
             for (Intent intent : trafficClass.intents) {
                 boolean isOptical = intent instanceof OpticalConnectivityIntent;
-                List<Intent> installables = intentService.getInstallableIntents(intent.id());
+                List<Intent> installables = intentService.getInstallableIntents(intent.key());
                 if (installables != null) {
                     for (Intent installable : installables) {
                         String type = isOptical ? trafficClass.type + " optical" : trafficClass.type;
