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 13796f9..d79d191 100644
--- a/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java
+++ b/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java
@@ -20,8 +20,11 @@
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.onosproject.cluster.ClusterService;
+import org.onosproject.cluster.NodeId;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
+import org.onosproject.mastership.MastershipService;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.Host;
 import org.onosproject.net.Link;
@@ -74,6 +77,12 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected HostService hostService;
 
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected MastershipService mastershipService;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected ClusterService clusterService;
+
     private ApplicationId appId;
 
     // TODO use a shared map for distributed operation
@@ -89,11 +98,10 @@
 
     @Activate
     protected void activate() {
-        // TODO elect a leader and have one instance do the provisioning
         intentService.addListener(pathProvisioner);
         appId = coreService.registerApplication("org.onosproject.optical");
         initTport();
-        log.info("Starting optical path provisoning...");
+        log.info("Starting optical path provisioning...");
     }
 
     protected void initTport() {
@@ -178,17 +186,27 @@
             // Low speed LLDP may cause multiple calls which are not expected
 
             if (!IntentState.FAILED.equals(intentService.getIntentState(intent.key()))) {
-                   return;
+                return;
             }
 
+            NodeId localNode = clusterService.getLocalNode().id();
+
             List<Intent> intents = Lists.newArrayList();
             if (intent instanceof HostToHostIntent) {
                 HostToHostIntent hostToHostIntent = (HostToHostIntent) intent;
+
                 Host one = hostService.getHost(hostToHostIntent.one());
                 Host two = hostService.getHost(hostToHostIntent.two());
                 if (one == null || two == null) {
                     return; //FIXME
                 }
+
+                // Ignore if we're not the master for the intent's origin device
+                NodeId sourceMaster = mastershipService.getMasterFor(one.location().deviceId());
+                if (!localNode.equals(sourceMaster)) {
+                    return;
+                }
+
                 // provision both directions
                 intents.addAll(getOpticalPath(one.location(), two.location()));
                 // note: bi-directional intent is set up
@@ -196,6 +214,13 @@
                 //intents.addAll(getOpticalPath(two.location(), one.location()));
             } else if (intent instanceof PointToPointIntent) {
                 PointToPointIntent p2pIntent = (PointToPointIntent) intent;
+
+                // Ignore if we're not the master for the intent's origin device
+                NodeId sourceMaster = mastershipService.getMasterFor(p2pIntent.ingressPoint().deviceId());
+                if (!localNode.equals(sourceMaster)) {
+                    return;
+                }
+
                 intents.addAll(getOpticalPath(p2pIntent.ingressPoint(), p2pIntent.egressPoint()));
             } else {
                 log.info("Unsupported intent type: {}", intent.getClass());
diff --git a/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java b/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java
index 18989bb..8908601 100644
--- a/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java
+++ b/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java
@@ -220,6 +220,11 @@
      * @param request the packet request
      */
     private void pushRule(Device device, PacketRequest request) {
+        // Everything is pre-provisioned on ROADMs
+        if (device.type().equals(Device.Type.ROADM)) {
+            return;
+        }
+
         TrafficTreatment treatment = DefaultTrafficTreatment.builder()
                                                             .punt()
                                                             .build();
diff --git a/core/net/src/main/java/org/onosproject/net/resource/impl/LinkResourceManager.java b/core/net/src/main/java/org/onosproject/net/resource/impl/LinkResourceManager.java
index fadb152..61c36d0 100644
--- a/core/net/src/main/java/org/onosproject/net/resource/impl/LinkResourceManager.java
+++ b/core/net/src/main/java/org/onosproject/net/resource/impl/LinkResourceManager.java
@@ -15,17 +15,6 @@
  */
 package org.onosproject.net.resource.impl;
 
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -57,6 +46,17 @@
 import org.onosproject.net.resource.ResourceType;
 import org.slf4j.Logger;
 
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.slf4j.LoggerFactory.getLogger;
+
 /**
  * Provides basic implementation of link resources allocation.
  */
@@ -197,7 +197,10 @@
         Map<Link, Set<ResourceAllocation>> allocations = new HashMap<>();
         for (Link link : req.links()) {
             allocations.put(link, new HashSet<ResourceAllocation>(allocs));
-            allocations.get(link).addAll(allocsPerLink.get(link));
+            Set<ResourceAllocation> linkAllocs = allocsPerLink.get(link);
+            if (linkAllocs != null) {
+                allocations.get(link).addAll(linkAllocs);
+            }
         }
         LinkResourceAllocations result =
                 new DefaultLinkResourceAllocations(req, allocations);
diff --git a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java
index a855d5a..c1b8aa1 100644
--- a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java
+++ b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java
@@ -90,7 +90,7 @@
     protected DeviceService deviceService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected PacketService packetSevice;
+    protected PacketService packetService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected MastershipService masterService;
@@ -143,7 +143,7 @@
 
         providerService = providerRegistry.register(this);
         deviceService.addListener(listener);
-        packetSevice.addProcessor(listener, 0);
+        packetService.addProcessor(listener, 0);
         masterService.addListener(roleListener);
 
         LinkDiscovery ld;
@@ -152,7 +152,7 @@
                 log.debug("LinkDiscovery from {} disabled by configuration", device.id());
                 continue;
             }
-            ld = new LinkDiscovery(device, packetSevice, masterService,
+            ld = new LinkDiscovery(device, packetService, masterService,
                               providerService, useBDDP);
             discoverers.put(device.id(), ld);
             for (Port p : deviceService.getPorts(device.id())) {
@@ -186,7 +186,7 @@
         }
         providerRegistry.unregister(this);
         deviceService.removeListener(listener);
-        packetSevice.removeProcessor(listener);
+        packetService.removeProcessor(listener);
         masterService.removeListener(roleListener);
         providerService = null;
 
@@ -237,14 +237,14 @@
     private void requestPackets() {
         TrafficSelector.Builder lldpSelector = DefaultTrafficSelector.builder();
         lldpSelector.matchEthType(Ethernet.TYPE_LLDP);
-        packetSevice.requestPackets(lldpSelector.build(),
-                                    PacketPriority.CONTROL, appId);
+        packetService.requestPackets(lldpSelector.build(),
+                PacketPriority.CONTROL, appId);
 
         if (useBDDP) {
             TrafficSelector.Builder bddpSelector = DefaultTrafficSelector.builder();
             bddpSelector.matchEthType(Ethernet.TYPE_BSN);
-            packetSevice.requestPackets(bddpSelector.build(),
-                                        PacketPriority.CONTROL, appId);
+            packetService.requestPackets(bddpSelector.build(),
+                    PacketPriority.CONTROL, appId);
         }
     }
 
@@ -273,7 +273,7 @@
                     log.debug("Device mastership changed ({}) {}",
                             event.type(), deviceId);
                     discoverers.put(deviceId, new LinkDiscovery(device,
-                            packetSevice, masterService, providerService,
+                            packetService, masterService, providerService,
                             useBDDP));
                 }
             }
@@ -307,8 +307,7 @@
                             log.debug("Device added ({}) {}", event.type(),
                                       deviceId);
                             discoverers.put(deviceId, new LinkDiscovery(device,
-                                                                        packetSevice, masterService, providerService,
-                                                                        useBDDP));
+                                    packetService, masterService, providerService, useBDDP));
                         } else {
                             if (ld.isStopped()) {
                                 log.debug("Device restarted ({}) {}", event.type(),
@@ -412,7 +411,7 @@
                     DeviceId did = dev.id();
                     synchronized (discoverers) {
                         if (!discoverers.containsKey(did)) {
-                            ld = new LinkDiscovery(dev, packetSevice,
+                            ld = new LinkDiscovery(dev, packetService,
                                     masterService, providerService, useBDDP);
                             discoverers.put(did, ld);
                             for (Port p : deviceService.getPorts(did)) {
diff --git a/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LLDPLinkProviderTest.java b/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LLDPLinkProviderTest.java
index f7be862..a601b23 100644
--- a/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LLDPLinkProviderTest.java
+++ b/providers/lldp/src/test/java/org/onosproject/provider/lldp/impl/LLDPLinkProviderTest.java
@@ -112,7 +112,7 @@
         provider.coreService = coreService;
 
         provider.deviceService = deviceService;
-        provider.packetSevice = packetService;
+        provider.packetService = packetService;
         provider.providerRegistry = linkService;
         provider.masterService = masterService;
 
@@ -204,7 +204,7 @@
         provider.coreService = null;
         provider.providerRegistry = null;
         provider.deviceService = null;
-        provider.packetSevice = null;
+        provider.packetService = null;
     }
 
     private DeviceEvent deviceEvent(DeviceEvent.Type type, DeviceId did) {
