diff --git a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/CordModelCache.java b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/CordModelCache.java
index 10b7318..f660c64 100644
--- a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/CordModelCache.java
+++ b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/CordModelCache.java
@@ -109,7 +109,7 @@
             }
         }
 
-        // TODO: tell XOS which functions are enabled / disabled
+        XosManager.INSTANCE.setNewBundle(SUBSCRIBER_ID, currentBundle);
     }
 
 
@@ -144,6 +144,7 @@
         checkNotNull(func, "function not part of bundle: " + funcId);
 
         func.applyParam(user, param, value);
+        XosManager.INSTANCE.apply(SUBSCRIBER_ID, func, user);
     }
 
     // =============
diff --git a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/XosManager.java b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/XosManager.java
index 4ae42ba..e0ce191 100644
--- a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/XosManager.java
+++ b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/XosManager.java
@@ -17,9 +17,89 @@
 
 package org.onosproject.cord.gui;
 
+import org.onosproject.cord.gui.model.Bundle;
+import org.onosproject.cord.gui.model.SubscriberUser;
+import org.onosproject.cord.gui.model.XosFunction;
+import org.onosproject.cord.gui.model.XosFunctionDescriptor;
+
+import java.util.Set;
+
 /**
  * Encapsulation of interactions with XOS.
  */
 public class XosManager {
 
+    private static final String XOS_HOST = "10.254.1.22";
+    private static final String XOS_PORT = "8000";
+
+    private static final String URL_FMT = "http://%s:%s/xoslib/rs/subscriber/";
+
+    private static final String BASE_URL =
+            String.format(URL_FMT, XOS_HOST, XOS_PORT);
+
+
+    /**
+     * No instantiation (except via unit test).
+     */
+    XosManager() {}
+
+    /**
+     * Configure XOS to enable the functions that compose the given bundle,
+     * and disable all the others, for the given subscriber.
+     *
+     * @param subscriberId subscriber identifier
+     * @param bundle new bundle to set
+     */
+    public void setNewBundle(int subscriberId, Bundle bundle) {
+        System.out.println("\n>> Set New Bundle : " + bundle.descriptor().id());
+
+        String urlFmt = xosUrl(subscriberId) + "services/%s/%s";
+        Set<XosFunctionDescriptor> inBundle = bundle.descriptor().functions();
+        for (XosFunctionDescriptor xfd: XosFunctionDescriptor.values()) {
+            xosEnableFunction(urlFmt, xfd, inBundle.contains(xfd));
+        }
+    }
+
+    /**
+     * Configure XOS with new setting for given user and function, for the
+     * given subscriber account.
+     *
+     * @param subscriberId subscriber identifier
+     * @param func specific XOS function
+     * @param user user (containing function state)
+     */
+    public void apply(int subscriberId, XosFunction func, SubscriberUser user) {
+        System.out.println("\n>> Apply : " + func + " for " + user);
+
+        String urlPrefix = xosUrl(subscriberId) + "users/" + user.id() + "/";
+        String url = urlPrefix + func.xosUrlApply(user);
+        restPut(url);
+    }
+
+
+    // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+    private String xosUrl(int subscriberId) {
+        return BASE_URL + String.format("%d/", subscriberId);
+    }
+
+    private void xosEnableFunction(String urlFmt, XosFunctionDescriptor xfd,
+                                   boolean enable) {
+        String url = String.format(urlFmt, xfd.id(), enable);
+        restPut(url);
+    }
+
+    // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+    private void restPut(String url) {
+        // TODO: wire up to Jackson client...
+        System.out.println("<<PUT>> " + url);
+    }
+
+    // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+    /**
+     * Singleton instance.
+     */
+    public static final XosManager INSTANCE = new XosManager();
 }
diff --git a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/DefaultXosFunction.java b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/DefaultXosFunction.java
index f4a25e7..1ffa8ef 100644
--- a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/DefaultXosFunction.java
+++ b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/DefaultXosFunction.java
@@ -55,4 +55,12 @@
         return null;
     }
 
+    public String xosUrlApply(SubscriberUser user) {
+        return null;
+    }
+
+    @Override
+    public String toString() {
+        return "{XosFunction: " + xfd + "}";
+    }
 }
diff --git a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/SubscriberUser.java b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/SubscriberUser.java
index 88dd3d8..31ac794 100644
--- a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/SubscriberUser.java
+++ b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/SubscriberUser.java
@@ -99,4 +99,9 @@
     public void clearMementos() {
         mementos.clear();
     }
+
+    @Override
+    public String toString() {
+        return "{User: " + name + "}";
+    }
 }
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 d1f8483..a2e2f2c 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
@@ -71,5 +71,16 @@
         public void setLevel(Level level) {
             this.level = level;
         }
+
+        public String level() {
+            return level.toString();
+        }
+    }
+
+    @Override
+    public String xosUrlApply(SubscriberUser user) {
+        XosFunctionDescriptor xfd = XosFunctionDescriptor.URL_FILTER;
+        UrlFilterMemento memo = (UrlFilterMemento) user.getMemento(xfd);
+        return xfd.id() + "/" + memo.level();
     }
 }
diff --git a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunction.java b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunction.java
index 3c02a72..2790dfd 100644
--- a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunction.java
+++ b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunction.java
@@ -50,6 +50,15 @@
     Memento createMemento();
 
     /**
+     * Create the XOS specific URL suffix for applying state change for
+     * the given user.
+     *
+     * @param user the user
+     * @return URL suffix
+     */
+    String xosUrlApply(SubscriberUser user);
+
+    /**
      * Internal state memento.
      */
     interface Memento {
