diff --git a/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtn.java b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtn.java
index 4017d5a..2996557 100644
--- a/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtn.java
+++ b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtn.java
@@ -209,7 +209,8 @@
     }
 
     @Override
-    public void createServiceDependency(CordServiceId tServiceId, CordServiceId pServiceId) {
+    public void createServiceDependency(CordServiceId tServiceId, CordServiceId pServiceId,
+                                        boolean isBidirectional) {
         CordService tService = getCordService(tServiceId);
         CordService pService = getCordService(pServiceId);
 
@@ -219,7 +220,7 @@
         }
 
         log.info("Service dependency from {} to {} created.", tService.id().id(), pService.id().id());
-        ruleInstaller.populateServiceDependencyRules(tService, pService);
+        ruleInstaller.populateServiceDependencyRules(tService, pService, isBidirectional);
     }
 
     @Override
diff --git a/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnRuleInstaller.java b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnRuleInstaller.java
index 8b52c34..d1a0f24 100644
--- a/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnRuleInstaller.java
+++ b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnRuleInstaller.java
@@ -254,8 +254,10 @@
      *
      * @param tService tenant cord service
      * @param pService provider cord service
+     * @param isBidirectional true to enable bidirectional connection between two services
      */
-    public void populateServiceDependencyRules(CordService tService, CordService pService) {
+    public void populateServiceDependencyRules(CordService tService, CordService pService,
+                                               boolean isBidirectional) {
         checkNotNull(tService);
         checkNotNull(pService);
 
@@ -280,6 +282,9 @@
 
         populateIndirectAccessRule(srcRange, serviceIp, outGroups);
         populateDirectAccessRule(srcRange, dstRange);
+        if (isBidirectional) {
+            populateDirectAccessRule(dstRange, srcRange);
+        }
         populateInServiceRule(inPorts, outGroups);
     }
 
diff --git a/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnService.java b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnService.java
index b5bef86..87125d4 100644
--- a/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnService.java
+++ b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/CordVtnService.java
@@ -44,8 +44,11 @@
      *
      * @param tServiceId id of the service which has a dependency
      * @param pServiceId id of the service which provide dependency
+     * @param isBidirectional true to enable bidirectional connectivity between two services
      */
-    void createServiceDependency(CordServiceId tServiceId, CordServiceId pServiceId);
+    void createServiceDependency(CordServiceId tServiceId,
+                                 CordServiceId pServiceId,
+                                 boolean isBidirectional);
 
     /**
      * Removes all dependencies from a given tenant service.
diff --git a/apps/cordvtn/src/main/java/org/onosproject/cordvtn/rest/ServiceDependencyWebResource.java b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/rest/ServiceDependencyWebResource.java
index c5d1ded..e91c1b6 100644
--- a/apps/cordvtn/src/main/java/org/onosproject/cordvtn/rest/ServiceDependencyWebResource.java
+++ b/apps/cordvtn/src/main/java/org/onosproject/cordvtn/rest/ServiceDependencyWebResource.java
@@ -19,16 +19,13 @@
 import org.onosproject.cordvtn.CordServiceId;
 import org.onosproject.rest.AbstractWebResource;
 
-import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import java.io.InputStream;
 
 /**
  * Manages service dependency.
@@ -37,9 +34,10 @@
 public class ServiceDependencyWebResource extends AbstractWebResource {
 
     private final CordVtnService service = get(CordVtnService.class);
+    private static final String BIDIRECTION = "b";
 
     /**
-     * Creates service dependencies.
+     * Creates service dependencies with unidirectional access between the services.
      *
      * @param tServiceId tenant service id
      * @param pServiceId provider service id
@@ -48,10 +46,31 @@
     @POST
     @Path("{tenantServiceId}/{providerServiceId}")
     @Produces(MediaType.APPLICATION_JSON)
-    @Consumes(MediaType.APPLICATION_JSON)
     public Response createServiceDependency(@PathParam("tenantServiceId") String tServiceId,
                                             @PathParam("providerServiceId") String pServiceId) {
-        service.createServiceDependency(CordServiceId.of(tServiceId), CordServiceId.of(pServiceId));
+        service.createServiceDependency(CordServiceId.of(tServiceId),
+                                        CordServiceId.of(pServiceId),
+                                        false);
+        return Response.status(Response.Status.OK).build();
+    }
+
+    /**
+     * Creates service dependencies with an access type extension between the services.
+     *
+     * @param tServiceId tenant service id
+     * @param pServiceId provider service id
+     * @param direction b for bidirectional access, otherwise unidirectional access
+     * @return 200 OK
+     */
+    @POST
+    @Path("{tenantServiceId}/{providerServiceId}/{direction}")
+    @Produces(MediaType.APPLICATION_JSON)
+    public Response createServiceDependency(@PathParam("tenantServiceId") String tServiceId,
+                                            @PathParam("providerServiceId") String pServiceId,
+                                            @PathParam("direction") String direction) {
+        service.createServiceDependency(CordServiceId.of(tServiceId),
+                                        CordServiceId.of(pServiceId),
+                                        direction.equals(BIDIRECTION));
         return Response.status(Response.Status.OK).build();
     }
 
@@ -70,21 +89,4 @@
         service.removeServiceDependency(CordServiceId.of(tServiceId), CordServiceId.of(pServiceId));
         return Response.status(Response.Status.OK).build();
     }
-
-    /**
-     * Updates service dependencies.
-     *
-     * @param serviceId service id
-     * @param stream input JSON
-     * @return 200 OK, or 400 Bad Request
-     */
-    @PUT
-    @Path("{serviceId}")
-    @Produces(MediaType.APPLICATION_JSON)
-    @Consumes(MediaType.APPLICATION_JSON)
-    public Response updateServiceDependency(@PathParam("serviceId") String serviceId,
-                                            InputStream stream) {
-        // TODO define input stream
-        return Response.status(Response.Status.OK).build();
-    }
 }
