diff --git a/src/net/i2p/android/wizard/model/Conditional.java b/src/net/i2p/android/wizard/model/Conditional.java
index 0458c2b835b54363b421462baf6feb9b50f31a77..829ecf84e078d32160f76be8fb940ae061f9d51b 100644
--- a/src/net/i2p/android/wizard/model/Conditional.java
+++ b/src/net/i2p/android/wizard/model/Conditional.java
@@ -17,6 +17,7 @@
 package net.i2p.android.wizard.model;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 public class Conditional implements ModelCallbacks {
@@ -45,10 +46,33 @@ public class Conditional implements ModelCallbacks {
         }
 
         public boolean isSatisfied() {
-            // If we have no data from the conditional,
-            // assume that the page will be shown.
-            if (mData == null) return true;
             return mCompValue.equals(mData);
         }
     }
+
+    public class NotEqualCondition<T> implements Condition {
+        private T mCompValue;
+
+        public NotEqualCondition(Page page, T compValue) {
+            mCompValue = compValue;
+            mConditionalPages.add(page);
+        }
+
+        public boolean isSatisfied() {
+            return !(mCompValue.equals(mData));
+        }
+    }
+
+    public class EqualAnyCondition<T> implements Condition {
+        private ArrayList<T> mChoices = new ArrayList<T>();
+
+        public EqualAnyCondition(Page page, T... choices) {
+            mChoices.addAll(Arrays.asList(choices));
+            mConditionalPages.add(page);
+        }
+
+        public boolean isSatisfied() {
+            return mChoices.contains(mData);
+        }
+    }
 }
diff --git a/src/net/i2p/android/wizard/model/Page.java b/src/net/i2p/android/wizard/model/Page.java
index 01d7e60c93a6ed81aa4a119934bf13a77a7d597f..98cbdd6a2796b69b14b6c86ae310289298d2161a 100644
--- a/src/net/i2p/android/wizard/model/Page.java
+++ b/src/net/i2p/android/wizard/model/Page.java
@@ -152,6 +152,18 @@ public abstract class Page implements PageTreeNode {
         return this;
     }
 
+    public <T> Page setNotEqualCondition(Conditional conditional, T comp) {
+        Conditional.Condition c = conditional.new NotEqualCondition<T>(this, comp);
+        mConditions.add(c);
+        return this;
+    }
+
+    public <T> Page setEqualAnyCondition(Conditional conditional, T... choices) {
+        Conditional.Condition c = conditional.new EqualAnyCondition<T>(this, choices);
+        mConditions.add(c);
+        return this;
+    }
+
     public Page satisfyAllConditions(boolean conditionAnd) {
         mConditionAnd = conditionAnd;
         return this;