diff --git a/src/main/java/net/onrc/onos/ofcontroller/proxyarp/ProxyArpManager.java b/src/main/java/net/onrc/onos/ofcontroller/proxyarp/ProxyArpManager.java
index 1f852c8..90c7db0 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/proxyarp/ProxyArpManager.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/proxyarp/ProxyArpManager.java
@@ -18,6 +18,7 @@
 import net.floodlightcontroller.packet.Ethernet;
 import net.floodlightcontroller.topology.ITopologyService;
 import net.floodlightcontroller.topology.NodePortTuple;
+import net.floodlightcontroller.util.MACAddress;
 
 import org.openflow.protocol.OFMessage;
 import org.openflow.protocol.OFPacketIn;
@@ -26,6 +27,7 @@
 import org.openflow.protocol.OFType;
 import org.openflow.protocol.action.OFAction;
 import org.openflow.protocol.action.OFActionOutput;
+import org.openflow.util.HexString;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -84,7 +86,7 @@
 			ARP arp = (ARP) eth.getPayload();
 			
 			if (arp.getOpCode() == ARP.OP_REQUEST) {
-				log.debug("ARP request received");
+				log.debug("ARP request received for {}", bytesToStringAddr(arp.getTargetProtocolAddress()));
 				
 				byte[] mac = lookupArpTable(arp.getTargetProtocolAddress());
 				
@@ -100,11 +102,12 @@
 				}
 				else {
 					//We know the address, so send a reply
+					log.debug("Sending reply of {}", MACAddress.valueOf(mac).toString());
 					sendArpReply(arp, pi, mac, sw);
 				}
 			}
 			else if (arp.getOpCode() == ARP.OP_REPLY) {
-				log.debug("ARP reply recieved for {}");
+				log.debug("ARP reply recieved for {}", bytesToStringAddr(arp.getSenderProtocolAddress()));
 				
 				log.debug("arp table {}", arpTable.keySet());
 				
@@ -168,6 +171,11 @@
 			Collection<Short> enabledPorts = sw.getEnabledPortNumbers();
 			Set<Short> linkPorts = topology.getPortsWithLinks(sw.getId());
 			
+			if (linkPorts == null){
+				//I think this means the switch isn't known to topology yet.
+				//Maybe it only just joined.
+				continue;
+			}
 			
 			OFPacketOut po = new OFPacketOut();
 			po.setInPort(OFPort.OFPP_NONE)
@@ -188,6 +196,7 @@
 				}
 				
 				actions.add(new OFActionOutput(portNum));
+				log.debug("Broadcasting out {}/{}", HexString.toHexString(sw.getId()), portNum);
 			}
 			
 			po.setActions(actions);
@@ -232,7 +241,7 @@
 		OFPacketOut po = new OFPacketOut();
 		po.setInPort(OFPort.OFPP_NONE)
 			.setBufferId(-1)
-			.setPacketData(pi.getPacketData())
+			.setPacketData(eth.serialize())
 			.setActions(actions)
 			.setActionsLength((short)OFActionOutput.MINIMUM_LENGTH)
 			.setLengthU(OFPacketOut.MINIMUM_LENGTH + OFActionOutput.MINIMUM_LENGTH
@@ -242,10 +251,24 @@
 		msgList.add(po);
 		
 		try {
+			log.debug("Sending ARP reply to {}/{}", HexString.toHexString(sw.getId()), pi.getInPort());
 			sw.write(msgList, null);
 			sw.flush();
 		} catch (IOException e) {
 			log.warn("Failure writing packet out to switch", e);
 		}
 	}
+	
+	private String bytesToStringAddr(byte[] bytes){
+		InetAddress addr;
+		try {
+			addr = InetAddress.getByAddress(bytes);
+		} catch (UnknownHostException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+			return "";
+		}
+		if (addr == null) return "";
+		else return addr.getHostAddress();
+	}
 }
