diff --git a/src/com/android/settings/net/NetworkPolicyEditor.java b/src/com/android/settings/net/NetworkPolicyEditor.java
index 82bd385..ad2afa0 100644
--- a/src/com/android/settings/net/NetworkPolicyEditor.java
+++ b/src/com/android/settings/net/NetworkPolicyEditor.java
@@ -160,7 +160,8 @@
     }
 
     public int getPolicyCycleDay(NetworkTemplate template) {
-        return getPolicy(template).cycleDay;
+        final NetworkPolicy policy = getPolicy(template);
+        return (policy != null) ? policy.cycleDay : -1;
     }
 
     public void setPolicyCycleDay(NetworkTemplate template, int cycleDay, String cycleTimezone) {
@@ -173,7 +174,8 @@
     }
 
     public long getPolicyWarningBytes(NetworkTemplate template) {
-        return getPolicy(template).warningBytes;
+        final NetworkPolicy policy = getPolicy(template);
+        return (policy != null) ? policy.warningBytes : WARNING_DISABLED;
     }
 
     public void setPolicyWarningBytes(NetworkTemplate template, long warningBytes) {
@@ -185,7 +187,8 @@
     }
 
     public long getPolicyLimitBytes(NetworkTemplate template) {
-        return getPolicy(template).limitBytes;
+        final NetworkPolicy policy = getPolicy(template);
+        return (policy != null) ? policy.limitBytes : LIMIT_DISABLED;
     }
 
     public void setPolicyLimitBytes(NetworkTemplate template, long limitBytes) {
@@ -309,8 +312,16 @@
             final NetworkPolicy policy3g = getPolicy(template3g);
             final NetworkPolicy policy4g = getPolicy(template4g);
 
-            final NetworkPolicy restrictive = policy3g.compareTo(policy4g) < 0 ? policy3g
-                    : policy4g;
+            NetworkPolicy restrictive = null;
+            if ((policy3g == null) && (policy4g == null)) {
+                return false;
+            } else if (policy3g == null) {
+                restrictive = policy4g;
+            } else if (policy4g == null) {
+                restrictive = policy3g;
+            } else {
+                restrictive = policy3g.compareTo(policy4g) < 0 ? policy3g : policy4g;
+            }
             mPolicies.remove(policy3g);
             mPolicies.remove(policy4g);
             mPolicies.add(new NetworkPolicy(templateAll, restrictive.cycleDay,
@@ -321,6 +332,9 @@
         } else if (!beforeSplit && split) {
             // duplicate existing policy into two rules
             final NetworkPolicy policyAll = getPolicy(templateAll);
+            if (policyAll == null) {
+                return false;
+            }
             mPolicies.remove(policyAll);
             mPolicies.add(new NetworkPolicy(template3g, policyAll.cycleDay, policyAll.cycleTimezone,
                     policyAll.warningBytes, policyAll.limitBytes, SNOOZE_NEVER, SNOOZE_NEVER,
