diff --git a/src/main/java/net/onrc/onos/core/configmanager/INetworkConfigService.java b/src/main/java/net/onrc/onos/core/configmanager/INetworkConfigService.java
index 4090879..174759b 100644
--- a/src/main/java/net/onrc/onos/core/configmanager/INetworkConfigService.java
+++ b/src/main/java/net/onrc/onos/core/configmanager/INetworkConfigService.java
@@ -5,8 +5,8 @@
 import net.floodlightcontroller.core.module.IFloodlightService;
 import net.onrc.onos.core.configmanager.NetworkConfig.LinkConfig;
 import net.onrc.onos.core.configmanager.NetworkConfig.SwitchConfig;
-import net.onrc.onos.core.linkdiscovery.Link;
 import net.onrc.onos.core.util.Dpid;
+import net.onrc.onos.core.util.LinkTuple;
 
 /**
  * Exposes methods to retrieve network configuration.
@@ -187,10 +187,10 @@
      * ConfigState contains the result of the check. The enclosed LinkConfig may
      * or may not be null, depending on the outcome of the check.
      *
-     * @param link unidirectional {@link Link} to be queried
+     * @param linkTuple unidirectional link to be queried
      * @return LinkConfigStatus with outcome of check and associated config.
      */
-    public LinkConfigStatus checkLinkConfig(Link link);
+    public LinkConfigStatus checkLinkConfig(LinkTuple linkTuple);
 
     /**
      * Retrieves a list of switches that have been configured, and have been
diff --git a/src/main/java/net/onrc/onos/core/configmanager/NetworkConfigManager.java b/src/main/java/net/onrc/onos/core/configmanager/NetworkConfigManager.java
index 0c1f933..b1d3836 100644
--- a/src/main/java/net/onrc/onos/core/configmanager/NetworkConfigManager.java
+++ b/src/main/java/net/onrc/onos/core/configmanager/NetworkConfigManager.java
@@ -19,10 +19,9 @@
 import net.floodlightcontroller.core.module.IFloodlightService;
 import net.onrc.onos.core.configmanager.NetworkConfig.LinkConfig;
 import net.onrc.onos.core.configmanager.NetworkConfig.SwitchConfig;
-import net.onrc.onos.core.linkdiscovery.Link;
 import net.onrc.onos.core.util.Dpid;
 import net.onrc.onos.core.util.LinkTuple;
-import net.onrc.onos.core.util.SwitchPort;
+import net.onrc.onos.core.util.PortNumber;
 
 import org.codehaus.jackson.JsonParseException;
 import org.codehaus.jackson.map.JsonMappingException;
@@ -99,17 +98,17 @@
 
     }
 
-    public LinkConfigStatus checkLinkConfig(Link link) {
-        LinkConfig lkc = getConfiguredLink(link);
+    public LinkConfigStatus checkLinkConfig(LinkTuple linkTuple) {
+        LinkConfig lkc = getConfiguredLink(linkTuple);
         // links are always disallowed if any one of the nodes that make up the
         // link are disallowed
-        Dpid linkNode1 = new Dpid(link.getSrc());
+        Dpid linkNode1 = linkTuple.getSrc().getDpid();
         SwitchConfigStatus scs1 = checkSwitchConfig(linkNode1);
         if (scs1.getConfigState() == NetworkConfigState.DENY) {
             return new LinkConfigStatus(NetworkConfigState.DENY, null,
                     "Link-node: " + linkNode1 + " denied by config: " + scs1.getMsg());
         }
-        Dpid linkNode2 = new Dpid(link.getDst());
+        Dpid linkNode2 = linkTuple.getDst().getDpid();
         SwitchConfigStatus scs2 = checkSwitchConfig(linkNode2);
         if (scs2.getConfigState() == NetworkConfigState.DENY) {
             return new LinkConfigStatus(NetworkConfigState.DENY, null,
@@ -349,18 +348,18 @@
 
     }
 
-    private LinkConfig getConfiguredLink(Link link) {
+    private LinkConfig getConfiguredLink(LinkTuple linkTuple) {
         LinkConfig lkc = null;
         // first try the unidirectional link with the ports assigned
-        lkc = configuredLinks.get(new LinkTuple(
-                new SwitchPort(link.getSrc(), link.getSrcPort()),
-                new SwitchPort(link.getDst(), link.getDstPort())));
+        lkc = configuredLinks.get(linkTuple);
         if (lkc == null) {
             // try without ports, as configuration may be for all links
             // between the two switches
-            lkc = configuredLinks.get(new LinkTuple(
-                    new SwitchPort(link.getSrc(), (short) 0),
-                    new SwitchPort(link.getDst(), (short) 0)));
+            LinkTuple portlessLink = new LinkTuple(linkTuple.getSrc().getDpid(),
+                    PortNumber.uint32(0), linkTuple.getDst().getDpid(),
+                    PortNumber.uint32(0));
+
+            lkc = configuredLinks.get(portlessLink);
         }
         return lkc;
     }
diff --git a/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java b/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java
index 9ef6fa9..5838483 100644
--- a/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java
+++ b/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java
@@ -42,6 +42,7 @@
 import net.onrc.onos.core.registry.IControllerRegistryService.ControlChangeCallback;
 import net.onrc.onos.core.registry.RegistryException;
 import net.onrc.onos.core.util.Dpid;
+import net.onrc.onos.core.util.LinkTuple;
 import net.onrc.onos.core.util.OnosInstanceId;
 import net.onrc.onos.core.util.PortNumberUtils;
 import net.onrc.onos.core.util.SwitchPort;
@@ -292,16 +293,18 @@
 
     @Override
     public void linkAdded(Link link) {
-        LinkConfigStatus ret = networkConfigService.checkLinkConfig(link);
+        LinkTuple linkTuple = new LinkTuple(
+                new SwitchPort(link.getSrc(), link.getSrcPort()),
+                new SwitchPort(link.getDst(), link.getDstPort()));
+
+        LinkConfigStatus ret = networkConfigService.checkLinkConfig(linkTuple);
         if (ret.getConfigState() == NetworkConfigState.DENY) {
             log.warn("Discovered {} denied by configuration. {} "
                     + "Not allowing it to proceed.", link, ret.getMsg());
             return;
         }
 
-        LinkData linkData = new LinkData(
-                new SwitchPort(link.getSrc(), link.getSrcPort()),
-                new SwitchPort(link.getDst(), link.getDstPort()));
+        LinkData linkData = new LinkData(linkTuple);
 
         // FIXME should be merging, with existing attrs, etc..
         // TODO define attr name as constant somewhere.
