diff --git a/java/src/com/zerotier/sdk/VirtualNetworkConfig.java b/java/src/com/zerotier/sdk/VirtualNetworkConfig.java
index 6245436a7..275266823 100644
--- a/java/src/com/zerotier/sdk/VirtualNetworkConfig.java
+++ b/java/src/com/zerotier/sdk/VirtualNetworkConfig.java
@@ -107,100 +107,108 @@ public class VirtualNetworkConfig implements Comparable<VirtualNetworkConfig> {
     @Override
     public boolean equals(Object o) {
 
+        if (o == null) {
+            Log.i(TAG, "Old is null");
+
+            return false;
+        }
+
         if (!(o instanceof VirtualNetworkConfig)) {
-            return false;
-        }
-
-        VirtualNetworkConfig cfg = (VirtualNetworkConfig) o;
-
-        if (this.nwid != cfg.nwid) {
-            Log.i(TAG, "NetworkID Changed. Old: " + StringUtils.networkIdToString(this.nwid) + " (" + this.nwid + "), " +
-                    "New: " + StringUtils.networkIdToString(cfg.nwid) + " (" + cfg.nwid + ")");
+            Log.i(TAG, "Old is not an instance of VirtualNetworkConfig: " + o);
 
             return false;
         }
 
-        if (this.mac != cfg.mac) {
-            Log.i(TAG, "MAC Changed. Old: " + StringUtils.macAddressToString(this.mac) + ", New: " + StringUtils.macAddressToString(cfg.mac));
+        VirtualNetworkConfig old = (VirtualNetworkConfig) o;
+
+        if (this.nwid != old.nwid) {
+            Log.i(TAG, "NetworkID Changed. New: " + StringUtils.networkIdToString(this.nwid) + " (" + this.nwid + "), " +
+                    "Old: " + StringUtils.networkIdToString(old.nwid) + " (" + old.nwid + ")");
 
             return false;
         }
 
-        if (!this.name.equals(cfg.name)) {
-            Log.i(TAG, "Name Changed. Old: " + this.name + ", New: " + cfg.name);
+        if (this.mac != old.mac) {
+            Log.i(TAG, "MAC Changed. New: " + StringUtils.macAddressToString(this.mac) + ", Old: " + StringUtils.macAddressToString(old.mac));
 
             return false;
         }
 
-        if (this.status != cfg.status) {
-            Log.i(TAG, "Status Changed. Old: " + this.status + ", New: " + cfg.status);
+        if (!this.name.equals(old.name)) {
+            Log.i(TAG, "Name Changed. New: " + this.name + ", Old: " + old.name);
 
             return false;
         }
 
-        if (this.type != cfg.type) {
-            Log.i(TAG, "Type changed. Old " + this.type + ", New: " + cfg.type);
+        if (this.status != old.status) {
+            Log.i(TAG, "Status Changed. New: " + this.status + ", Old: " + old.status);
 
             return false;
         }
 
-        if (this.mtu != cfg.mtu) {
-            Log.i(TAG, "MTU Changed. Old: " + this.mtu + ", New: " + cfg.mtu);
+        if (this.type != old.type) {
+            Log.i(TAG, "Type changed. New: " + this.type + ", Old: " + old.type);
 
             return false;
         }
 
-        if (this.dhcp != cfg.dhcp) {
-            Log.i(TAG, "DHCP Flag Changed. Old: " + this.dhcp + ", New: " + cfg.dhcp);
+        if (this.mtu != old.mtu) {
+            Log.i(TAG, "MTU Changed. New: " + this.mtu + ", Old: " + old.mtu);
 
             return false;
         }
 
-        if (this.bridge != cfg.bridge) {
-            Log.i(TAG, "Bridge Flag Changed. Old: " + this.bridge + ", New: " + cfg.bridge);
+        if (this.dhcp != old.dhcp) {
+            Log.i(TAG, "DHCP Flag Changed. New: " + this.dhcp + ", Old: " + old.dhcp);
 
             return false;
         }
 
-        if (this.broadcastEnabled != cfg.broadcastEnabled) {
-            Log.i(TAG, "Broadcast Flag Changed. Old: "+ this.broadcastEnabled + ", New: " + cfg.broadcastEnabled);
+        if (this.bridge != old.bridge) {
+            Log.i(TAG, "Bridge Flag Changed. New: " + this.bridge + ", Old: " + old.bridge);
 
             return false;
         }
 
-        if (this.portError != cfg.portError) {
-            Log.i(TAG, "Port Error Changed. Old: " + this.portError + ", New: " + cfg.portError);
+        if (this.broadcastEnabled != old.broadcastEnabled) {
+            Log.i(TAG, "Broadcast Flag Changed. New: "+ this.broadcastEnabled + ", Old: " + old.broadcastEnabled);
 
             return false;
         }
 
-        if (this.netconfRevision != cfg.netconfRevision) {
-            Log.i(TAG, "NetConfRevision Changed. Old: " + this.netconfRevision + ", New: " + cfg.netconfRevision);
+        if (this.portError != old.portError) {
+            Log.i(TAG, "Port Error Changed. New: " + this.portError + ", Old: " + old.portError);
 
             return false;
         }
 
-        if (!Arrays.equals(assignedAddresses, cfg.assignedAddresses)) {
+        if (this.netconfRevision != old.netconfRevision) {
+            Log.i(TAG, "NetConfRevision Changed. New: " + this.netconfRevision + ", Old: " + old.netconfRevision);
+
+            return false;
+        }
+
+        if (!Arrays.equals(assignedAddresses, old.assignedAddresses)) {
 
-            ArrayList<String> aaCurrent = new ArrayList<>();
             ArrayList<String> aaNew = new ArrayList<>();
+            ArrayList<String> aaOld = new ArrayList<>();
             for (InetSocketAddress s : assignedAddresses) {
-                aaCurrent.add(s.toString());
-            }
-            for (InetSocketAddress s : cfg.assignedAddresses) {
                 aaNew.add(s.toString());
             }
-            Collections.sort(aaCurrent);
+            for (InetSocketAddress s : old.assignedAddresses) {
+                aaOld.add(s.toString());
+            }
             Collections.sort(aaNew);
+            Collections.sort(aaOld);
 
             Log.i(TAG, "Assigned Addresses Changed");
-            Log.i(TAG, "Old:");
-            for (String s : aaCurrent) {
+            Log.i(TAG, "New:");
+            for (String s : aaNew) {
                 Log.i(TAG, "    " + s);
             }
             Log.i(TAG, "");
-            Log.i(TAG, "New:");
-            for (String s : aaNew) {
+            Log.i(TAG, "Old:");
+            for (String s : aaOld) {
                 Log.i(TAG, "    " +s);
             }
             Log.i(TAG, "");
@@ -208,27 +216,27 @@ public class VirtualNetworkConfig implements Comparable<VirtualNetworkConfig> {
             return false;
         }
 
-        if (!Arrays.equals(routes, cfg.routes)) {
+        if (!Arrays.equals(routes, old.routes)) {
 
-            ArrayList<String> rCurrent = new ArrayList<>();
             ArrayList<String> rNew = new ArrayList<>();
+            ArrayList<String> rOld = new ArrayList<>();
             for (VirtualNetworkRoute r : routes) {
-                rCurrent.add(r.toString());
-            }
-            for (VirtualNetworkRoute r : cfg.routes) {
                 rNew.add(r.toString());
             }
-            Collections.sort(rCurrent);
+            for (VirtualNetworkRoute r : old.routes) {
+                rOld.add(r.toString());
+            }
             Collections.sort(rNew);
+            Collections.sort(rOld);
 
             Log.i(TAG, "Managed Routes Changed");
-            Log.i(TAG, "Old:");
-            for (String s : rCurrent) {
+            Log.i(TAG, "New:");
+            for (String s : rNew) {
                 Log.i(TAG, "    " + s);
             }
             Log.i(TAG, "");
-            Log.i(TAG, "New:");
-            for (String s : rNew) {
+            Log.i(TAG, "Old:");
+            for (String s : rOld) {
                 Log.i(TAG, "    " + s);
             }
             Log.i(TAG, "");
@@ -239,20 +247,22 @@ public class VirtualNetworkConfig implements Comparable<VirtualNetworkConfig> {
         boolean dnsEquals;
         if (this.dns == null) {
             //noinspection RedundantIfStatement
-            if (cfg.dns == null) {
+            if (old.dns == null) {
                 dnsEquals = true;
             } else {
                 dnsEquals = false;
             }
         } else {
-            if (cfg.dns == null) {
+            if (old.dns == null) {
                 dnsEquals = false;
             } else {
-                dnsEquals = this.dns.equals(cfg.dns);
+                dnsEquals = this.dns.equals(old.dns);
             }
         }
 
         if (!dnsEquals) {
+            Log.i(TAG, "DNS Changed. New: " + this.dns + ", Old: " + old.dns);
+
             return false;
         }