diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/domain/IntentDomainProvider.java b/incubator/api/src/main/java/org/onosproject/incubator/net/domain/IntentDomainProvider.java
index bfea73d..51265f7 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/domain/IntentDomainProvider.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/domain/IntentDomainProvider.java
@@ -32,11 +32,12 @@
      * can be used. Request contexts can be explictly cancelled, or they will
      * eventually time out so that resources can be reused.
      *
+     * @param domain intent domain for the request
      * @param primitive intent primitive
      * @return request contexts that contain resources to satisfy the intent
      */
     //TODO Consider an iterable and/or holds (only hold one or two reservation(s) at a time)
-    List<RequestContext> request(IntentPrimitive primitive);
+    List<RequestContext> request(IntentDomain domain, IntentPrimitive primitive);
 
     /**
      * Request that the provider attempt to modify an existing resource to satisfy
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/domain/IntentResource.java b/incubator/api/src/main/java/org/onosproject/incubator/net/domain/IntentResource.java
index a49bf95..6902483 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/domain/IntentResource.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/domain/IntentResource.java
@@ -21,21 +21,27 @@
  * The abstract base class for the resource that satisfies an intent primitive.
  */
 @Beta
-public abstract class IntentResource {
+public class IntentResource {
 
     private final IntentPrimitive primitive;
+    private final long tunnelId;
 
     // TODO add other common fields
     //String ingressTag;
     //String egressTag;
     //etc.
 
-    IntentResource(IntentPrimitive primitive) {
+    public IntentResource(IntentPrimitive primitive, long tunnelId) {
         this.primitive = primitive;
+        this.tunnelId = tunnelId;
     }
 
     public IntentPrimitive primitive() {
         return primitive;
     }
 
+    public long tunnelId() {
+        return tunnelId;
+    }
+
 }
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/domain/RequestContext.java b/incubator/api/src/main/java/org/onosproject/incubator/net/domain/RequestContext.java
index 81f452e..90593dd 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/domain/RequestContext.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/domain/RequestContext.java
@@ -27,10 +27,21 @@
  */
 @Beta
 public class RequestContext {
-    IntentDomain domain;
-    IntentResource resource;
+    private final IntentDomain domain;
+    private final IntentResource resource;
     //TODO other common parameters:
     //String cost;
 
-    //TODO getters/setters
+    public RequestContext(IntentDomain domain, IntentResource resource) {
+        this.domain = domain;
+        this.resource = resource;
+    }
+
+    public IntentDomain domain() {
+        return domain;
+    }
+
+    public IntentResource resource() {
+        return resource;
+    }
 }
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/domain/TunnelPrimitive.java b/incubator/api/src/main/java/org/onosproject/incubator/net/domain/TunnelPrimitive.java
new file mode 100644
index 0000000..c624e92
--- /dev/null
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/domain/TunnelPrimitive.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2015 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.incubator.net.domain;
+
+import org.onosproject.core.ApplicationId;
+import org.onosproject.net.ConnectPoint;
+
+/**
+ * Provides connectivity through a domain.
+ */
+public class TunnelPrimitive extends IntentPrimitive {
+
+    private final ConnectPoint one;
+    private final ConnectPoint two;
+
+    public TunnelPrimitive(ApplicationId appId, ConnectPoint one, ConnectPoint two) {
+        super(appId);
+        this.one = one;
+        this.two = two;
+    }
+}
