diff --git a/src/main/java/net/onrc/onos/apps/bgproute/PtreeNode.java b/src/main/java/net/onrc/onos/apps/bgproute/PtreeNode.java
index b5e4716..9189e3b 100644
--- a/src/main/java/net/onrc/onos/apps/bgproute/PtreeNode.java
+++ b/src/main/java/net/onrc/onos/apps/bgproute/PtreeNode.java
@@ -13,7 +13,7 @@
 
     public int refCount;
 
-    public RibEntry rib;
+    // public RibEntry rib;
     private static final Logger log = LoggerFactory.getLogger(BgpRoute.class);
 
     PtreeNode(byte[] key, int keyBits, int maxKeyOctet) {
@@ -21,7 +21,7 @@
         left = null;
         right = null;
         refCount = 0;
-        rib = null;
+        // rib = null;
         this.key = new byte[maxKeyOctet];
         this.keyBits = keyBits;
         log.debug("inside Ptreenode constructor key {} bits {}", key, keyBits);
diff --git a/src/main/java/net/onrc/onos/core/intent/IntentMap.java b/src/main/java/net/onrc/onos/core/intent/IntentMap.java
index 9bdb21f..25b98a5 100644
--- a/src/main/java/net/onrc/onos/core/intent/IntentMap.java
+++ b/src/main/java/net/onrc/onos/core/intent/IntentMap.java
@@ -47,6 +47,25 @@
 
         public ChangedEventType eventType;
         public Intent intent;
+
+        /**
+         * Get a string representation of the object.
+         * <p/>
+         * The string has the following form:
+         * [eventType=XXX intent=XXX]
+         *
+         * @return a string representation of the object.
+         */
+        @Override
+        public String toString() {
+            StringBuilder ret = new StringBuilder();
+            ret.append("[eventType=");
+            ret.append(this.eventType.toString());
+            ret.append(" intent=");
+            ret.append(this.intent.toString());
+            ret.append("]");
+            return ret.toString();
+        }
     }
 
     public interface ChangedListener extends EventListener {
diff --git a/src/test/java/net/onrc/onos/apps/bgproute/PtreeTest.java b/src/test/java/net/onrc/onos/apps/bgproute/PtreeTest.java
index f0fd40a..1b4b8b1 100644
--- a/src/test/java/net/onrc/onos/apps/bgproute/PtreeTest.java
+++ b/src/test/java/net/onrc/onos/apps/bgproute/PtreeTest.java
@@ -53,7 +53,7 @@
             byteAddresses.put(prefix, InetAddresses.forString(address).getAddress());
 
             PtreeNode node = ptree.acquire(byteAddresses.get(prefix), prefixLength);
-            node.rib = new RibEntry("192.168.10.101", "192.168.60.1");
+            // node.rib = new RibEntry("192.168.10.101", "192.168.60.1");
             ooptrie.put(new Prefix(byteAddresses.get(prefix), prefixLength),
                     new RibEntry("192.168.10.101", "192.168.60.1"));
         }
@@ -75,14 +75,16 @@
         //First let's test an empty Ptree
         Ptree localPtree = new Ptree(32);
         PtreeNode node = localPtree.acquire(new byte[]{0x00, 0x00, 0x00, 0x00});
-        assertTrue(node != null && node.rib == null);
+        // assertTrue(node != null && node.rib == null);
+        assertTrue(node != null);
 
         //Now let's look at the prepopulated tree
         String testPrefix = "206.17.144.0/20";
         PtreeNode existingNode = ptree.acquire(byteAddresses.get(testPrefix), 20);
         printByteArray(existingNode.key);
         printByteArray(byteAddresses.get(testPrefix));
-        assertTrue(existingNode != null && existingNode.rib == null);
+        // assertTrue(existingNode != null && existingNode.rib == null);
+        assertTrue(existingNode != null);
 
         assertTrue(Arrays.equals(existingNode.key, byteAddresses.get(testPrefix)));
     }
