diff --git a/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/RCNetworkGraphPublisher.java b/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/RCNetworkGraphPublisher.java
index d2c10fc..a1d09df 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/RCNetworkGraphPublisher.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/floodlightlistener/RCNetworkGraphPublisher.java
@@ -194,14 +194,15 @@
 
 	@Override
 	public void switchPortAdded(Long switchId, OFPhysicalPort port) {
-		// TODO Auto-generated method stub
-
+		PortEvent portEvent = new PortEvent(switchId, (long)port.getPortNumber());
+		networkGraphDiscoveryInterface.putPortEvent(portEvent);
+		linkDiscovery.RemoveFromSuppressLLDPs(switchId, port.getPortNumber());
 	}
 
 	@Override
 	public void switchPortRemoved(Long switchId, OFPhysicalPort port) {
-		// TODO Auto-generated method stub
-
+		PortEvent portEvent = new PortEvent(switchId, (long)port.getPortNumber());
+		networkGraphDiscoveryInterface.removePortEvent(portEvent);
 	}
 
 	@Override
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkImpl.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkImpl.java
index 31461a5..c8954a9 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkImpl.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/LinkImpl.java
@@ -32,12 +32,12 @@
 
 	protected void setToPorts() {
 		((PortImpl)srcPort).setOutgoingLink(this);
-		((PortImpl)srcPort).setIncomingLink(this);
+		((PortImpl)dstPort).setIncomingLink(this);
 	}
 
 	protected void unsetFromPorts() {
 		((PortImpl)srcPort).setOutgoingLink(null);
-		((PortImpl)srcPort).setIncomingLink(null);
+		((PortImpl)dstPort).setIncomingLink(null);
 	}
 
 	@Override
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphDatastore.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphDatastore.java
index c8f4d8d..9fd7f86 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphDatastore.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphDatastore.java
@@ -119,47 +119,47 @@
 
 	public void addPort(PortEvent port) {
 		log.debug("Adding port {}", port);
-//		RCSwitch rcSwitch = new RCSwitch(sw.getDpid());
-//
-//		try {
-//			rcSwitch.read();
-//		} catch (ObjectDoesntExistException e) {
-//			log.warn("Add port failed because switch {} doesn't exist", sw.getDpid(), e);
-//			return;
-//		}
-//
-//		RCPort rcPort = new RCPort(port.getSwitch().getDpid(), (long)port.getNumber());
-//		rcPort.setStatus(RCPort.STATUS.ACTIVE);
-//		// TODO add description into RCPort
-//		//rcPort.setDescription(port.getDescription());
-//		rcSwitch.addPortId(rcPort.getId());
-//
-//		writeObject(rcPort);
-//		writeObject(rcSwitch);
+		//RCSwitch rcSwitch = new RCSwitch(sw.getDpid());
+
+		//try {
+			//rcSwitch.read();
+		//} catch (ObjectDoesntExistException e) {
+			//log.warn("Add port failed because switch {} doesn't exist", sw.getDpid(), e);
+			//return;
+		//}
+
+		RCPort rcPort = new RCPort(port.getDpid(), port.getNumber());
+		rcPort.setStatus(RCPort.STATUS.ACTIVE);
+		// TODO add description into RCPort
+		//rcPort.setDescription(port.getDescription());
+		//rcSwitch.addPortId(rcPort.getId());
+
+		writeObject(rcPort);
+		//writeObject(rcSwitch);
 	}
 
 	public void deactivatePort(PortEvent port) {
 		log.debug("Deactivating port {}", port);
-//		RCPort rcPort = new RCPort(port.getSwitch().getDpid(), (long)port.getNumber());
-//
-//		for (int i = 0; i < NUM_RETRIES; i++) {
-//			try {
-//				rcPort.read();
-//			} catch (ObjectDoesntExistException e) {
-//				// oh well, we were deactivating anyway
-//				log.warn("Trying to deactivate a port that doesn't exist: {}", port);
-//				return;
-//			}
-//
-//			rcPort.setStatus(RCPort.STATUS.INACTIVE);
-//
-//			try {
-//				rcPort.update();
-//				break;
-//			} catch (ObjectDoesntExistException | WrongVersionException e) {
-//				// retry
-//			}
-//		}
+		RCPort rcPort = new RCPort(port.getDpid(), port.getNumber());
+
+		for (int i = 0; i < NUM_RETRIES; i++) {
+			try {
+				rcPort.read();
+			} catch (ObjectDoesntExistException e) {
+				// oh well, we were deactivating anyway
+				log.warn("Trying to deactivate a port that doesn't exist: {}", port);
+				return;
+			}
+
+			rcPort.setStatus(RCPort.STATUS.INACTIVE);
+
+			try {
+				rcPort.update();
+				break;
+			} catch (ObjectDoesntExistException | WrongVersionException e) {
+				// retry
+			}
+		}
 	}
 
 	public void addLink(LinkEvent linkEvent) {
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java
index b821050..1c342e0 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java
@@ -85,14 +85,20 @@
 
 	@Override
 	public void putPortEvent(PortEvent portEvent) {
-		// TODO Auto-generated method stub
-
+		if (prepareForAddPortEvent(portEvent)) {
+			datastore.addPort(portEvent);
+			putPort(portEvent);
+			// TODO send out notification
+		}
 	}
 
 	@Override
 	public void removePortEvent(PortEvent portEvent) {
-		// TODO Auto-generated method stub
-
+		if (prepareForRemovePortEvent(portEvent)) {
+			datastore.deactivatePort(portEvent);
+			removePort(portEvent);
+			// TODO send out notification
+		}
 	}
 
 	@Override
@@ -223,7 +229,7 @@
 	    }
 	    // Src/Dst Port must exist
 	    Port srcPort = srcSw.getPort(linkEvt.getSrc().number);
-	    Port dstPort = srcSw.getPort(linkEvt.getDst().number);
+	    Port dstPort = dstSw.getPort(linkEvt.getDst().number);
 	    if ( srcPort == null || dstPort == null ) {
 		return false;
 	    }
@@ -250,14 +256,25 @@
 	    Switch srcSw = getSwitch(linkEvt.getSrc().dpid);
 	    Switch dstSw = getSwitch(linkEvt.getDst().dpid);
 	    if ( srcSw == null || dstSw == null ) {
+	    log.warn("Rejecting addLink {} because switch doesn't exist", linkEvt);
 		return false;
 	    }
 	    // Src/Dst Port must exist
 	    Port srcPort = srcSw.getPort(linkEvt.getSrc().number);
 	    Port dstPort = srcSw.getPort(linkEvt.getDst().number);
 	    if ( srcPort == null || dstPort == null ) {
+	    log.warn("Rejecting addLink {} because port doesn't exist", linkEvt);
 		return false;
 	    }
+	    
+	    Link link = srcPort.getOutgoingLink();
+	    
+	    if (link == null || 
+	    		!link.getDestinationPortNumber().equals(linkEvt.getDst().number)
+	    		|| !link.getDestinationSwitchDpid().equals(linkEvt.getDst().dpid)) {
+	    log.warn("Rejecting removeLink {} because link doesn't exist", linkEvt);
+	  	return false;
+	    }
 
 	    // Prep: None
 	    return true;
