diff --git a/core/api/src/main/java/org/onosproject/ui/UiExtension.java b/core/api/src/main/java/org/onosproject/ui/UiExtension.java
index 06c6e3b..1528db2 100644
--- a/core/api/src/main/java/org/onosproject/ui/UiExtension.java
+++ b/core/api/src/main/java/org/onosproject/ui/UiExtension.java
@@ -44,18 +44,21 @@
     private final List<UiView> views;
     private final UiMessageHandlerFactory messageHandlerFactory;
     private final UiTopoOverlayFactory topoOverlayFactory;
+    private final UiTopoMapFactory topoMapFactory;
 
     private boolean isValid = true;
 
     // private constructor - only the builder calls this
     private UiExtension(ClassLoader cl, String path, List<UiView> views,
                         UiMessageHandlerFactory mhFactory,
-                        UiTopoOverlayFactory toFactory) {
+                        UiTopoOverlayFactory toFactory,
+                        UiTopoMapFactory tmFactory) {
         this.classLoader = cl;
         this.resourcePath = path;
         this.views = views;
         this.messageHandlerFactory = mhFactory;
         this.topoOverlayFactory = toFactory;
+        this.topoMapFactory = tmFactory;
     }
 
 
@@ -115,6 +118,15 @@
         return topoOverlayFactory;
     }
 
+    /**
+     * Returns the topology map factory, if one was defined.
+     *
+     * @return topology map factory
+     */
+    public UiTopoMapFactory topoMapFactory() {
+        return topoMapFactory;
+    }
+
 
     // Returns the resource input stream from the specified class-loader.
     private InputStream getStream(String path) {
@@ -137,6 +149,7 @@
         private List<UiView> views = new ArrayList<>();
         private UiMessageHandlerFactory messageHandlerFactory = null;
         private UiTopoOverlayFactory topoOverlayFactory = null;
+        private UiTopoMapFactory topoMapFactory = null;
 
         /**
          * Create a builder with the given class loader.
@@ -189,13 +202,25 @@
         }
 
         /**
+         * Sets the topology map factory for this extension.
+         *
+         * @param tmFactory topology map factory
+         * @return self, for chaining
+         */
+        public Builder topoMapFactory(UiTopoMapFactory tmFactory) {
+            this.topoMapFactory = tmFactory;
+            return this;
+        }
+
+        /**
          * Builds the UI extension.
          *
          * @return UI extension instance
          */
         public UiExtension build() {
             return new UiExtension(classLoader, resourcePath, views,
-                                   messageHandlerFactory, topoOverlayFactory);
+                                    messageHandlerFactory, topoOverlayFactory,
+                                    topoMapFactory);
         }
 
     }
diff --git a/core/api/src/main/java/org/onosproject/ui/UiTopoMap.java b/core/api/src/main/java/org/onosproject/ui/UiTopoMap.java
new file mode 100644
index 0000000..9ba67ab
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/ui/UiTopoMap.java
@@ -0,0 +1,81 @@
+/*
+ * 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;
+
+/**
+ * Represents user interface topology view overlay.
+ */
+public class UiTopoMap {
+
+    private final String id;
+    private final String description;
+    private final String filePath;
+    private final double scale;
+
+
+    /**
+     * Creates a new topology map.
+     *
+     * @param id map identifier
+     * @param description map description
+     * @param filePath map filePath,
+     * @param scale map scale,
+     */
+    public UiTopoMap(String id, String description, String filePath, double scale) {
+        this.id = id;
+        this.description = description;
+        this.filePath = filePath;
+        this.scale = scale;
+    }
+
+    /**
+     * Returns the identifier for this map.
+     *
+     * @return the identifier
+     */
+    public String getId() {
+        return this.id;
+    }
+
+    /**
+     * Returns the description for this map.
+     *
+     * @return the description
+     */
+    public String getDescription() {
+        return this.description;
+    }
+
+    /**
+     * Returns the filePath for this map.
+     *
+     * @return the filePath
+     */
+    public String getFilePath() {
+        return this.filePath;
+    }
+
+    /**
+     * Returns the scale for this map.
+     *
+     * @return the scale
+     */
+    public double getScale() {
+        return this.scale;
+    }
+
+}
diff --git a/core/api/src/main/java/org/onosproject/ui/UiTopoMapFactory.java b/core/api/src/main/java/org/onosproject/ui/UiTopoMapFactory.java
new file mode 100644
index 0000000..5e787d4
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/ui/UiTopoMapFactory.java
@@ -0,0 +1,33 @@
+/*
+ * 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;
+
+import java.util.List;
+
+/**
+ * Abstraction of an entity capable of producing one or more topology
+ * map topologies.
+ */
+public interface UiTopoMapFactory {
+
+    /**
+     * Produces a list of new maps.
+     *
+     * @return list of new maps
+     */
+    List<UiTopoMap> newMaps();
+}
\ No newline at end of file
