diff --git a/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRoute.java b/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRoute.java
index cb361af..7848d34 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRoute.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRoute.java
@@ -311,23 +311,23 @@
 		Prefix r = new Prefix("10.0.0.0", 24);
 		Prefix a = new Prefix("10.0.0.1", 32);
 	
-		ptree.acquire(p.getAddress(), p.masklen);
-		ptree.acquire(q.getAddress(), q.masklen);
-		ptree.acquire(r.getAddress(), r.masklen);
+		ptree.acquire(p.getAddress(), p.getPrefixLength());
+		ptree.acquire(q.getAddress(), q.getPrefixLength());
+		ptree.acquire(r.getAddress(), r.getPrefixLength());
 	
 		System.out.println("Traverse start");
 		for (PtreeNode node = ptree.begin(); node != null; node = ptree.next(node)) {
 			Prefix p_result = new Prefix(node.key, node.keyBits);
 		}
 	
-		PtreeNode n = ptree.match(a.getAddress(), a.masklen);
+		PtreeNode n = ptree.match(a.getAddress(), a.getPrefixLength());
 		if (n != null) {
 			System.out.println("Matched prefix for 10.0.0.1:");
 			Prefix x = new Prefix(n.key, n.keyBits);
 			ptree.delReference(n);
 		}
 		
-		n = ptree.lookup(p.getAddress(), p.masklen);
+		n = ptree.lookup(p.getAddress(), p.getPrefixLength());
 		if (n != null) {
 			ptree.delReference(n);
 			ptree.delReference(n);
@@ -337,7 +337,7 @@
 			Prefix p_result = new Prefix(node.key, node.keyBits);
 		}
 		
-		n = ptree.lookup(q.getAddress(), q.masklen);
+		n = ptree.lookup(q.getAddress(), q.getPrefixLength());
 		if (n != null) {
 			ptree.delReference(n);
 			ptree.delReference(n);
@@ -347,7 +347,7 @@
 			Prefix p_result = new Prefix(node.key, node.keyBits);
 		}
 		
-		n = ptree.lookup(r.getAddress(), r.masklen);
+		n = ptree.lookup(r.getAddress(), r.getPrefixLength());
 		if (n != null) {
 			ptree.delReference(n);
 			ptree.delReference(n);
@@ -409,8 +409,8 @@
 				continue;
 			}
 			
-			PtreeNode node = ptree.acquire(p.getAddress(), p.masklen);
-			Rib rib = new Rib(router_id, nexthop, p.masklen);
+			PtreeNode node = ptree.acquire(p.getAddress(), p.getPrefixLength());
+			Rib rib = new Rib(router_id, nexthop, p.getPrefixLength());
 			
 			if (node.rib != null) {
 				node.rib = null;
diff --git a/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRouteResource.java b/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRouteResource.java
index 8355308..6860f74 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRouteResource.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/bgproute/BgpRouteResource.java
@@ -125,8 +125,8 @@
 				return reply + "\n";
 			}
 			
-			PtreeNode node = ptree.acquire(p.getAddress(), p.masklen);
-			Rib rib = new Rib(routerId, nexthop, p.masklen);
+			PtreeNode node = ptree.acquire(p.getAddress(), p.getPrefixLength());
+			Rib rib = new Rib(routerId, nexthop, p.getPrefixLength());
 
 			if (node.rib != null) {
 				node.rib = null;
@@ -183,7 +183,7 @@
 				return reply + "\n";
 			}
 
-			PtreeNode node = ptree.lookup(p.getAddress(), p.masklen);
+			PtreeNode node = ptree.lookup(p.getAddress(), p.getPrefixLength());
 			
 			//Remove the flows from the switches before the rib is lost
 			//Theory: we could get a delete for a prefix not in the Ptree.
@@ -195,7 +195,7 @@
 				bgpRoute.prefixDeleted(node);
 			}
 
-			Rib r = new Rib(routerId, nextHop, p.masklen);
+			Rib r = new Rib(routerId, nextHop, p.getPrefixLength());
 
 			if (node != null && node.rib != null) {
 				if (r.equals(node.rib)) {
diff --git a/src/main/java/net/onrc/onos/ofcontroller/bgproute/Prefix.java b/src/main/java/net/onrc/onos/ofcontroller/bgproute/Prefix.java
index c3baa37..4d7c53a 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/bgproute/Prefix.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/bgproute/Prefix.java
@@ -4,31 +4,40 @@
 import java.net.UnknownHostException;
 
 public class Prefix {
-	public int masklen;
-	protected InetAddress address;
+	private int prefixLength;
+	private InetAddress address;
 
-	public Prefix(byte[] addr, int masklen) throws UnknownHostException {
+	public Prefix(byte[] addr, int prefixLength) throws UnknownHostException {
 		//try {
 		address = InetAddress.getByAddress(addr);
 		//} catch (UnknownHostException e) {
 		//	System.out.println("InetAddress exception");
 		//	return;
 		//}
-		this.masklen = masklen;
-		//System.out.println(address.toString() + "/" + masklen);
+		this.prefixLength = prefixLength;
+		//System.out.println(address.toString() + "/" + prefixLength);
 	}
 
-	public Prefix(String str, int masklen) throws UnknownHostException {
+	public Prefix(String str, int prefixLength) throws UnknownHostException {
 		//try {
 		address = InetAddress.getByName(str);
 		//} catch (UnknownHostException e) {
 		//	System.out.println("InetAddress exception");
 		//	return;
 		//}
-		this.masklen = masklen;
+		this.prefixLength = prefixLength;
 	}
 
-	public byte [] getAddress() {
+	public int getPrefixLength() {
+		return prefixLength;
+	}
+	
+	public byte[] getAddress() {
 		return address.getAddress();
 	}
+	
+	@Override
+	public String toString() {
+		return address.getHostAddress() + "/" + prefixLength;
+	}
 }
