diff --git a/apps/optical/src/main/java/org/onlab/onos/optical/provisioner/OpticalPathProvisioner.java b/apps/optical/src/main/java/org/onlab/onos/optical/provisioner/OpticalPathProvisioner.java
index ba79d33..8b78800 100644
--- a/apps/optical/src/main/java/org/onlab/onos/optical/provisioner/OpticalPathProvisioner.java
+++ b/apps/optical/src/main/java/org/onlab/onos/optical/provisioner/OpticalPathProvisioner.java
@@ -30,9 +30,15 @@
 import org.onlab.onos.core.ApplicationId;
 import org.onlab.onos.core.CoreService;
 import org.onlab.onos.net.ConnectPoint;
+import org.onlab.onos.net.Host;
 import org.onlab.onos.net.Link;
 import org.onlab.onos.net.Path;
 import org.onlab.onos.net.device.DeviceService;
+import org.onlab.onos.net.flow.DefaultTrafficSelector;
+import org.onlab.onos.net.flow.TrafficSelector;
+import org.onlab.onos.net.flow.TrafficTreatment;
+import org.onlab.onos.net.host.HostService;
+import org.onlab.onos.net.intent.HostToHostIntent;
 import org.onlab.onos.net.intent.Intent;
 import org.onlab.onos.net.intent.IntentEvent;
 import org.onlab.onos.net.intent.IntentExtensionService;
@@ -47,9 +53,12 @@
 import org.onlab.onos.net.topology.TopologyEdge;
 
 import org.onlab.onos.net.topology.TopologyService;
+import org.onlab.packet.Ethernet;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static org.onlab.onos.net.flow.DefaultTrafficTreatment.builder;
+
 /**
  * OpticalPathProvisioner listens event notifications from the Intent F/W.
  * It generates one or more opticalConnectivityIntent(s) and submits (or withdraws) to Intent F/W
@@ -84,6 +93,9 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected LinkResourceService resourceService;
 
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected HostService hostService;
+
     private ApplicationId appId;
 
     //protected <IntentId> intentIdGenerator;
@@ -125,7 +137,28 @@
 
         private void setuplightpath(Intent intent) {
            // TODO support more packet intent types
-           if (!intent.getClass().equals(PointToPointIntent.class)) {
+
+           if (intent instanceof HostToHostIntent) {
+               HostToHostIntent hostToHostIntent = (HostToHostIntent) intent;
+               Host one = hostService.getHost(hostToHostIntent.one());
+               Host two = hostService.getHost(hostToHostIntent.two());
+
+               TrafficSelector selector = buildTrafficSelector();
+               TrafficTreatment treatment = builder().build();
+
+               PointToPointIntent intentOneToTwo =
+                       new PointToPointIntent(appId, selector, treatment,
+                                              one.location(), two.location());
+               intentService.submit(intentOneToTwo);
+               log.info("Submitting P2P intent {} ", intentOneToTwo);
+
+               PointToPointIntent intentTwoToOne =
+                       new PointToPointIntent(appId, selector, treatment,
+                                              two.location(), one.location());
+               intentService.submit(intentTwoToOne);
+               log.info("Submitting P2P intent for {} ", intentTwoToOne);
+               return;
+           } else if (!intent.getClass().equals(PointToPointIntent.class)) {
                return;
            }
 
@@ -162,7 +195,9 @@
            Path firstPath = itrPath.next();
            log.info(firstPath.links().toString());
 
-           ArrayList<Map<ConnectPoint, ConnectPoint>> connectionList = new ArrayList<>();
+           ArrayList<Map<ConnectPoint, ConnectPoint>> connectionList =
+                   new ArrayList<>();
+
 
            Iterator<Link> itrLink = firstPath.links().iterator();
            while (itrLink.hasNext()) {
@@ -233,6 +268,15 @@
           // TODO: tear down the idle lightpath if the utilization is close to zero.
         }
 
+        private TrafficSelector buildTrafficSelector() {
+            TrafficSelector.Builder selectorBuilder = DefaultTrafficSelector.builder();
+            Short ethType = Ethernet.TYPE_IPV4;
+
+            selectorBuilder.matchEthType(ethType);
+
+            return selectorBuilder.build();
+        }
+
     }
 
 }
diff --git a/tools/test/topos/optical2.py b/tools/test/topos/optical2.py
index bf4aba5..36cdbad 100644
--- a/tools/test/topos/optical2.py
+++ b/tools/test/topos/optical2.py
@@ -16,7 +16,7 @@
 
 class NullLink( Link ):
     "A dummy link that doesn't touch either interface"
-    def makeIntfPair( cls, intf1, intf2 ):
+    def makeIntfPair( cls, intf1, intf2, *args, **kwargs ):
         pass
     def delete( self ):
         pass
diff --git a/web/gui/src/main/java/org/onlab/onos/gui/TopologyWebSocket.java b/web/gui/src/main/java/org/onlab/onos/gui/TopologyWebSocket.java
index eee03ed..af28086 100644
--- a/web/gui/src/main/java/org/onlab/onos/gui/TopologyWebSocket.java
+++ b/web/gui/src/main/java/org/onlab/onos/gui/TopologyWebSocket.java
@@ -174,7 +174,7 @@
                 requestDetails(event);
             } else if (type.equals("updateMeta")) {
                 updateMetaUi(event);
-            } else if (type.equals("requestPath")) {
+            } else if (type.equals("addHostIntent")) {
                 createHostIntent(event);
             } else if (type.equals("requestTraffic")) {
                 requestTraffic(event);
