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 199c8d3..622d0e3 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
@@ -19,7 +19,8 @@
 
 import com.google.common.collect.ImmutableSet;
 
-import java.util.HashSet;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -27,7 +28,8 @@
  */
 public class Bundle {
     private final BundleDescriptor bundleDescriptor;
-    private final Set<XosFunction> functions;
+    private final Map<XosFunctionDescriptor, XosFunction> functionMap =
+        new HashMap<XosFunctionDescriptor, XosFunction>();
 
     /**
      * Constructs a new bundle instance.
@@ -36,7 +38,7 @@
      */
     public Bundle(BundleDescriptor bundleDescriptor) {
         this.bundleDescriptor = bundleDescriptor;
-        this.functions = initFunctions();
+        initFunctions();
     }
 
     /**
@@ -54,20 +56,16 @@
      * @return the functions
      */
     public Set<XosFunction> functions() {
-        return ImmutableSet.copyOf(functions);
+        return ImmutableSet.copyOf(functionMap.values());
     }
 
     /**
      * Creates an initial set of function instances.
-     *
-     * @return initial function instances
      */
-    private Set<XosFunction> initFunctions() {
-        Set<XosFunction> funcs = new HashSet<XosFunction>();
+    private void initFunctions() {
         for (XosFunctionDescriptor xfd: bundleDescriptor.functions()) {
-            funcs.add(createFunction(xfd));
+            functionMap.put(xfd, createFunction(xfd));
         }
-        return funcs;
     }
 
     private XosFunction createFunction(XosFunctionDescriptor xfd) {
@@ -83,4 +81,15 @@
         }
         return func;
     }
+
+    /**
+     * Returns the function instance for the specified descriptor, or returns
+     * null if function is not part of this bundle.
+     *
+     * @param xfd function descrriptor
+     * @return function instance
+     */
+    public XosFunction findFunction(XosFunctionDescriptor xfd) {
+        return functionMap.get(xfd);
+    }
 }
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 a4787a1..d1f8483 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
@@ -19,6 +19,8 @@
 
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 /**
  * Specialization of XosFunction for URL filtering.
  */
@@ -41,6 +43,18 @@
     }
 
     @Override
+    public void applyParam(SubscriberUser user, String param, String value) {
+        Memento memo = user.getMemento(descriptor());
+        checkNotNull(memo, "missing memento for " + descriptor());
+        UrlFilterMemento ufMemo = (UrlFilterMemento) memo;
+
+        if (LEVEL.equals(param)) {
+            Level newLevel = Level.valueOf(value.toUpperCase());
+            ufMemo.setLevel(newLevel);
+        }
+    }
+
+    @Override
     public Memento createMemento() {
         return new UrlFilterMemento();
     }
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 93ed831..991b72b 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
@@ -58,20 +58,6 @@
     }
 
     /**
-     * Applies a parameter change for the given function, in the context of
-     * the specified user.
-     *
-     * @param xfd function context
-     * @param userId user identifier
-     * @param param parameter name
-     * @param value value to apply
-     */
-    public static void apply(XosFunctionDescriptor xfd, int userId,
-                             String param, String value) {
-        // TODO:
-    }
-
-    /**
      * Creates an object node representation of the profile for the
      * specified user.
      *
