diff --git a/app/build.gradle b/app/build.gradle
index dd6535b5fd89787bb6b3cee63026e3beb440762f..45b8585abc161bdc7d824a3315659f75c5195f85 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,8 +8,8 @@ android {
         applicationId "com.mcdz.seeip"
         minSdkVersion 24
         targetSdkVersion 29
-        versionCode 3
-        versionName "1.11"
+        versionCode 4
+        versionName "1.12"
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
     }
diff --git a/app/src/main/java/com/mcdz/seeip/TileView.java b/app/src/main/java/com/mcdz/seeip/TileView.java
index 36113e76200e7833e30b5cbbda4de1e6495dc294..30f2c7830aab97522d334fd90b9e0df9b42e4df3 100644
--- a/app/src/main/java/com/mcdz/seeip/TileView.java
+++ b/app/src/main/java/com/mcdz/seeip/TileView.java
@@ -24,6 +24,7 @@ public class TileView extends TileService {
     }
 
     Tile tile;
+    boolean sw = true;
 
     @Override
     public void onStartListening() {
@@ -35,55 +36,53 @@ public class TileView extends TileService {
         tile.updateTile();
     }
 
-    /*
-        @Override
-        public void onStopListening() {
-            super.onStopListening();
-            tile.setLabel(getString(R.string.tile_name));
-            tile.setIcon(Icon.createWithResource(this,
-                    R.mipmap.ic_ip3));
-            tile.setState(Tile.STATE_INACTIVE);
-            tile.updateTile();
-        }
-    */
-
-    boolean sw = true;
-
+    // will be cleaning up this method soon
     public void displayIp() {
         sw = !sw;
         if (sw) {
-            if (!getLocalWifiIpAddress().equals(""))
+            if (!getLocalWifiIpAddress().equals("0.0.0.0")) {
                 getQsTile().setLabel(getLocalWifiIpAddress());
-            else
+                getQsTile().setIcon(Icon.createWithResource(this,
+                        R.mipmap.ic_ip3));
+            } else {
                 getQsTile().setLabel("0.0.0.0");
-
+                getQsTile().setIcon(Icon.createWithResource(this,
+                        R.mipmap.ic_nonet));
+            }
             getQsTile().updateTile();
         } else {
             tile.setIcon(Icon.createWithResource(this,
-                    R.mipmap.ic_public));
+                    R.mipmap.ic_wait));
+            tile.setState(Tile.STATE_INACTIVE);
             getQsTile().updateTile();
-            tile.setState(Tile.STATE_ACTIVE);
 
             Thread thread = new Thread(new Runnable() {
                 @Override
                 public void run() {
                     getQsTile().setLabel("Public…");
+                    tile.setIcon(Icon.createWithResource(TileView.this,
+                            R.mipmap.ic_wait));
                     getQsTile().updateTile();
-
                     try {
                         try {
                             getQsTile().setLabel(getPublicIpAddress());
-                            tile.setState(Tile.STATE_INACTIVE);
+                            tile.setIcon(Icon.createWithResource(TileView.this,
+                                    R.mipmap.ic_web));
+                            tile.setState(Tile.STATE_ACTIVE);
                             getQsTile().updateTile();
                         } catch (IOException e) {
                             e.printStackTrace();
                             getQsTile().setLabel("No Network");
+                            tile.setIcon(Icon.createWithResource(TileView.this,
+                                    R.mipmap.ic_nonet));
                             tile.setState(Tile.STATE_INACTIVE);
                             getQsTile().updateTile();
                         }
                         getQsTile().updateTile();   // unnecessary.
                     } catch (Exception e) {
                         e.printStackTrace();
+                        tile.setIcon(Icon.createWithResource(TileView.this,
+                                R.mipmap.ic_error));
                         getQsTile().setLabel("Error");
                         tile.setState(Tile.STATE_INACTIVE);
                         getQsTile().updateTile();
@@ -112,8 +111,11 @@ public class TileView extends TileService {
         } catch (UnknownHostException ex) {
             ipAddressString = null;
         }
-
-        return ipAddressString;
+        try {
+            return ipAddressString;
+        } catch (NullPointerException e) {
+            return "0.0.0.0";
+        }
     }
 
     public String getPublicIpAddress() throws IOException {
diff --git a/app/src/main/res/mipmap-mdpi/ic_error.png b/app/src/main/res/mipmap-mdpi/ic_error.png
new file mode 100644
index 0000000000000000000000000000000000000000..9c08a2b94ba45cd14ea870fe11dfb12ddad8f47c
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_error.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_http.png b/app/src/main/res/mipmap-mdpi/ic_http.png
new file mode 100644
index 0000000000000000000000000000000000000000..02b0f1b92e7d13908817c131b560a720a18e6f70
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_http.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_nonet.png b/app/src/main/res/mipmap-mdpi/ic_nonet.png
new file mode 100644
index 0000000000000000000000000000000000000000..f58565624d359985329032bed71f2a41022bf737
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_nonet.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_wait.png b/app/src/main/res/mipmap-mdpi/ic_wait.png
new file mode 100644
index 0000000000000000000000000000000000000000..691483ac2e8e04debac2b30c7437764a4acf36c3
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_wait.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_web.png b/app/src/main/res/mipmap-mdpi/ic_web.png
new file mode 100644
index 0000000000000000000000000000000000000000..4ecce4dc0a196e3c23acf992ba52b150e3968e7d
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_web.png differ