diff --git a/core/api/src/main/java/org/onosproject/net/intent/ObjectiveTrackerService.java b/core/api/src/main/java/org/onosproject/net/intent/ObjectiveTrackerService.java
new file mode 100644
index 0000000..78a28eb
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/intent/ObjectiveTrackerService.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2014-present Open Networking Laboratory
+ *
+ * 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.net.intent;
+
+import org.onosproject.net.NetworkResource;
+
+import java.util.Collection;
+
+/**
+ * Auxiliary service for tracking intent path flows and for notifying the
+ * intent service of environment changes via topology change delegate.
+ */
+public interface ObjectiveTrackerService {
+
+    /**
+     * Sets a topology change delegate.
+     *
+     * @param delegate topology change delegate
+     */
+    void setDelegate(TopologyChangeDelegate delegate);
+
+    /**
+     * Unsets topology change delegate.
+     *
+     * @param delegate topology change delegate
+     */
+    void unsetDelegate(TopologyChangeDelegate delegate);
+
+    /**
+     * Adds a path flow to be tracked.
+     *
+     * @param intentKey  intent identity on whose behalf the path is being tracked
+     * @param resources resources to track
+     */
+    // TODO consider using the IntentData here rather than just the key
+    void addTrackedResources(Key intentKey,
+                                    Collection<NetworkResource> resources);
+
+    /**
+     * Removes a path flow to be tracked.
+     *
+     * @param intentKey  intent identity on whose behalf the path is being tracked
+     * @param resources resources to stop tracking
+     */
+    void removeTrackedResources(Key intentKey,
+                                       Collection<NetworkResource> resources);
+
+    /**
+     * Submits the specified intent data to be tracked.
+     *
+     * @param intentData intent data object to be tracked
+     */
+    void trackIntent(IntentData intentData);
+}
diff --git a/core/api/src/main/java/org/onosproject/net/intent/TopologyChangeDelegate.java b/core/api/src/main/java/org/onosproject/net/intent/TopologyChangeDelegate.java
new file mode 100644
index 0000000..1836347
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/intent/TopologyChangeDelegate.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2014-present Open Networking Laboratory
+ *
+ * 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.net.intent;
+
+/**
+ * Auxiliary delegate for integration of intent manager and flow trackerService.
+ */
+public interface TopologyChangeDelegate {
+
+    /**
+     * Notifies that topology has changed in such a way that the specified
+     * intents should be recompiled. If the {@code compileAllFailed} parameter
+     * is true, then all intents in {@link org.onosproject.net.intent.IntentState#FAILED}
+     * state should be compiled as well.
+     *
+     * @param intentIds intents that should be recompiled
+     * @param compileAllFailed true implies full compile of all failed intents
+     *                         is required; false for selective recompile only
+     */
+    void triggerCompile(Iterable<Key> intentIds, boolean compileAllFailed);
+
+}
