diff --git a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/Bundle.java b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/Bundle.java
index 622d0e3..c51cc84 100644
--- a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/Bundle.java
+++ b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/Bundle.java
@@ -72,7 +72,7 @@
         XosFunction func;
         switch (xfd) {
             case URL_FILTER:
-                func = new UrlFilterFunction(xfd);
+                func = new UrlFilterFunction();
                 break;
 
             default:
diff --git a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/UrlFilterFunction.java b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/UrlFilterFunction.java
index a2e2f2c..863681c 100644
--- a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/UrlFilterFunction.java
+++ b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/UrlFilterFunction.java
@@ -29,17 +29,19 @@
     private static final String LEVEL = "level";
 
     /**
-     * Denotes the URL filtering levels available.
+     * Denotes the URL filtering levels available. From most restrictive
+     * to least restrictive. Note: <em>OFF</em> denies everything;
+     * <em>NONE</em> allows everything.
      */
-    public enum Level { PG, PG_13, R }
+    public enum Level { OFF, G, PG, PG_13, R, NONE }
 
     /**
      * The default URL filtering level
      */
-    public static final Level DEFAULT_LEVEL = Level.PG;
+    public static final Level DEFAULT_LEVEL = Level.G;
 
-    public UrlFilterFunction(XosFunctionDescriptor xfd) {
-        super(xfd);
+    public UrlFilterFunction() {
+        super(XosFunctionDescriptor.URL_FILTER);
     }
 
     @Override
diff --git a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunctionFactory.java b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunctionFactory.java
index 991b72b..a91dbfb 100644
--- a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunctionFactory.java
+++ b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunctionFactory.java
@@ -17,9 +17,6 @@
     private static final String LEVEL = "level";
     private static final String LEVELS = "levels";
 
-    private static final UrlFilterFunction.Level DEFAULT_FILTER_LEVEL =
-        UrlFilterFunction.Level.PG;
-
 
     // no instantiation
     private XosFunctionFactory() {}
@@ -91,7 +88,7 @@
         @Override
         ObjectNode params() {
             ObjectNode result = objectNode();
-            result.put(LEVEL, DEFAULT_FILTER_LEVEL.name());
+            result.put(LEVEL, UrlFilterFunction.DEFAULT_LEVEL.name());
             ArrayNode levels = arrayNode();
             for (UrlFilterFunction.Level lvl: UrlFilterFunction.Level.values()) {
                 levels.add(lvl.name());
diff --git a/apps/demo/cord-gui/src/test/org/onosproject/cord/gui/CoreModelCacheTest.java b/apps/demo/cord-gui/src/test/org/onosproject/cord/gui/CoreModelCacheTest.java
index 373f2e4..746d145 100644
--- a/apps/demo/cord-gui/src/test/org/onosproject/cord/gui/CoreModelCacheTest.java
+++ b/apps/demo/cord-gui/src/test/org/onosproject/cord/gui/CoreModelCacheTest.java
@@ -95,7 +95,7 @@
     public void setNewLevel() {
         cache.setCurrentBundle("family");
         JsonNode node = fromString(cache.jsonUsers());
-        assertEquals("wrong level", "PG", getMomsLevel(node));
+        assertEquals("wrong level", "G", getMomsLevel(node));
 
         cache.applyPerUserParam("1", "url_filter", "level", "R");
 
@@ -191,11 +191,14 @@
             "                \"name\": \"Parental Control\",\n" +
             "                \"desc\": \"Variable levels of URL filtering.\",\n" +
             "                \"params\": {\n" +
-            "                    \"level\": \"PG\",\n" +
+            "                    \"level\": \"G\",\n" +
             "                    \"levels\": [\n" +
+            "                        \"OFF\",\n" +
+            "                        \"G\",\n" +
             "                        \"PG\",\n" +
             "                        \"PG_13\",\n" +
-            "                        \"R\"\n" +
+            "                        \"R\",\n" +
+            "                        \"NONE\"\n" +
             "                    ]\n" +
             "                }\n" +
             "            }\n" +
@@ -252,7 +255,7 @@
             "      \"mac\": \"010203040506\",\n" +
             "      \"profile\": {\n" +
             "        \"url_filter\": {\n" +
-            "          \"level\": \"PG\"\n" +
+            "          \"level\": \"G\"\n" +
             "        }\n" +
             "      }\n" +
             "    },\n" +
@@ -262,7 +265,7 @@
             "      \"mac\": \"010203040507\",\n" +
             "      \"profile\": {\n" +
             "        \"url_filter\": {\n" +
-            "          \"level\": \"PG\"\n" +
+            "          \"level\": \"G\"\n" +
             "        }\n" +
             "      }\n" +
             "    },\n" +
@@ -272,7 +275,7 @@
             "      \"mac\": \"010203040508\",\n" +
             "      \"profile\": {\n" +
             "        \"url_filter\": {\n" +
-            "          \"level\": \"PG\"\n" +
+            "          \"level\": \"G\"\n" +
             "        }\n" +
             "      }\n" +
             "    },\n" +
@@ -282,7 +285,7 @@
             "      \"mac\": \"010203040509\",\n" +
             "      \"profile\": {\n" +
             "        \"url_filter\": {\n" +
-            "          \"level\": \"PG\"\n" +
+            "          \"level\": \"G\"\n" +
             "        }\n" +
             "      }\n" +
             "    }\n" +
diff --git a/apps/demo/cord-gui/src/test/org/onosproject/cord/gui/model/UrlFilterFunctionTest.java b/apps/demo/cord-gui/src/test/org/onosproject/cord/gui/model/UrlFilterFunctionTest.java
new file mode 100644
index 0000000..6bc75de
--- /dev/null
+++ b/apps/demo/cord-gui/src/test/org/onosproject/cord/gui/model/UrlFilterFunctionTest.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.onosproject.cord.gui.model;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Unit tests for {@link UrlFilterFunction}.
+ */
+public class UrlFilterFunctionTest {
+
+    private SubscriberUser user = new SubscriberUser(1, "foo", "fooMAC");
+    private UrlFilterFunction fn;
+
+    @Before
+    public void setUp() {
+        fn = new UrlFilterFunction();
+    }
+
+    @Test
+    public void basic() {
+        assertEquals("wrong enum const count",
+                     6, UrlFilterFunction.Level.values().length);
+    }
+
+    @Test
+    public void memento() {
+        XosFunction.Memento memo = fn.createMemento();
+        assertTrue("wrong class", memo instanceof UrlFilterFunction.UrlFilterMemento);
+        UrlFilterFunction.UrlFilterMemento umemo =
+                (UrlFilterFunction.UrlFilterMemento) memo;
+        assertEquals("wrong default level", "G", umemo.level());
+    }
+
+    @Test
+    public void memoNewLevel() {
+        XosFunction.Memento memo = fn.createMemento();
+        assertTrue("wrong class", memo instanceof UrlFilterFunction.UrlFilterMemento);
+        UrlFilterFunction.UrlFilterMemento umemo =
+                (UrlFilterFunction.UrlFilterMemento) memo;
+        assertEquals("wrong default level", "G", umemo.level());
+        umemo.setLevel(UrlFilterFunction.Level.R);
+        assertEquals("wrong new level", "R", umemo.level());
+    }
+
+    @Test
+    public void applyMemo() {
+        UrlFilterFunction.UrlFilterMemento memo =
+                (UrlFilterFunction.UrlFilterMemento) fn.createMemento();
+        memo.setLevel(UrlFilterFunction.Level.PG_13);
+        user.setMemento(XosFunctionDescriptor.URL_FILTER, memo);
+
+        assertEquals("wrong URL suffix", "url_filter/PG_13", fn.xosUrlApply(user));
+    }
+}
