diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java b/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java
index ed9eead..3488707 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java
@@ -189,7 +189,6 @@
     @Deactivate
     public void deactivate() {
         prefs.removeListener(prefsListener);
-        prefs.destroy();
         UiWebSocketServlet.closeAll();
         unregister(core);
         log.info("Stopped");
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/UiTopoLayoutManager.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/UiTopoLayoutManager.java
index a8959df..bc58121 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/UiTopoLayoutManager.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/UiTopoLayoutManager.java
@@ -16,16 +16,26 @@
 
 package org.onosproject.ui.impl.topo;
 
+import com.google.common.collect.ImmutableSet;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
+import org.onlab.util.KryoNamespace;
+import org.onosproject.store.serializers.KryoNamespaces;
+import org.onosproject.store.service.ConsistentMap;
+import org.onosproject.store.service.Serializer;
+import org.onosproject.store.service.StorageService;
 import org.onosproject.ui.UiTopoLayoutService;
 import org.onosproject.ui.model.topo.UiTopoLayout;
+import org.onosproject.ui.model.topo.UiTopoLayoutId;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * Manages the user interface topology layouts.
@@ -35,39 +45,54 @@
 @Service
 public class UiTopoLayoutManager implements UiTopoLayoutService {
 
-//    private static final ClassLoader CL =
-//            UiTopoLayoutManager.class.getClassLoader();
-
     private final Logger log = LoggerFactory.getLogger(getClass());
 
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected StorageService storageService;
+
+    private ConsistentMap<UiTopoLayoutId, UiTopoLayout> layouts;
+    private Map<UiTopoLayoutId, UiTopoLayout> layoutMap;
+
     @Activate
     public void activate() {
-        // TODO: implement starting stuff
+        KryoNamespace.Builder kryoBuilder = new KryoNamespace.Builder()
+                .register(KryoNamespaces.API)
+                .register(UiTopoLayout.class);
+
+        layouts = storageService.<UiTopoLayoutId, UiTopoLayout>consistentMapBuilder()
+                .withSerializer(Serializer.using(kryoBuilder.build()))
+                .withName("onos-topo-layouts")
+                .withRelaxedReadConsistency()
+                .build();
+        layoutMap = layouts.asJavaMap();
+
         log.info("Started");
     }
 
     @Deactivate
     public void deactivate() {
-        // TODO: implement stopping stuff
         log.info("Stopped");
     }
 
 
     @Override
-    public List<UiTopoLayout> getLayouts() {
-        // TODO: implement
-        return null;
+    public Set<UiTopoLayout> getLayouts() {
+        return ImmutableSet.copyOf(layoutMap.values());
     }
 
     @Override
     public boolean addLayout(UiTopoLayout layout) {
-        // TODO: implement
-        return false;
+        return layouts.put(layout.id(), layout) == null;
+    }
+
+    @Override
+    public UiTopoLayout getLayout(UiTopoLayoutId layoutId) {
+        return layoutMap.get(layoutId);
     }
 
     @Override
     public boolean removeLayout(UiTopoLayout layout) {
-        // TODO: implement
-        return false;
+        return layouts.remove(layout.id()) != null;
     }
+
 }
diff --git a/web/gui/src/test/java/org/onosproject/ui/impl/topo/UiTopoLayoutManagerTest.java b/web/gui/src/test/java/org/onosproject/ui/impl/topo/UiTopoLayoutManagerTest.java
new file mode 100644
index 0000000..c58e1a2
--- /dev/null
+++ b/web/gui/src/test/java/org/onosproject/ui/impl/topo/UiTopoLayoutManagerTest.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2016 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.ui.impl.topo;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onosproject.net.region.DefaultRegion;
+import org.onosproject.net.region.Region;
+import org.onosproject.net.region.RegionId;
+import org.onosproject.store.service.TestStorageService;
+import org.onosproject.ui.UiTopoLayoutService;
+import org.onosproject.ui.model.topo.UiTopoLayout;
+import org.onosproject.ui.model.topo.UiTopoLayoutId;
+
+import static org.junit.Assert.*;
+
+/**
+ * Suite of unit tests for the UI topology layout manager.
+ */
+public class UiTopoLayoutManagerTest {
+
+    private UiTopoLayoutService svc;
+    private UiTopoLayoutManager mgr;
+
+    private static final UiTopoLayout L1 =
+            new UiTopoLayout(UiTopoLayoutId.layoutId("l1"),
+                             new DefaultRegion(RegionId.regionId("r1"), "R1",
+                                               Region.Type.CAMPUS, null));
+    private static final UiTopoLayout L2 =
+            new UiTopoLayout(UiTopoLayoutId.layoutId("l2"),
+                             new DefaultRegion(RegionId.regionId("r2"), "R2",
+                                               Region.Type.CAMPUS, null));
+
+    @Before
+    public void setUp() {
+        mgr = new UiTopoLayoutManager();
+        svc = mgr;
+        mgr.storageService = new TestStorageService();
+        mgr.activate();
+    }
+
+    @After
+    public void tearDown() {
+        mgr.deactivate();
+        mgr.storageService = null;
+    }
+
+    @Test
+    public void basics() {
+        assertTrue("should be no layout", svc.getLayouts().isEmpty());
+        svc.addLayout(L1);
+        svc.addLayout(L2);
+        assertEquals("incorrect number of layouts", 2, svc.getLayouts().size());
+        assertEquals("incorrect layout", L1.id(), svc.getLayout(L1.id()).id());
+        assertEquals("incorrect layout", L2.id(), svc.getLayout(L2.id()).id());
+        svc.removeLayout(L1);
+        assertEquals("incorrect number of layouts", 1, svc.getLayouts().size());
+        assertNull("layout should be gone", svc.getLayout(L1.id()));
+        assertEquals("incorrect layout", L2.id(), svc.getLayout(L2.id()).id());
+    }
+
+
+}
\ No newline at end of file
