diff --git a/core/api/src/main/java/org/onosproject/ui/UiTopoLayoutService.java b/core/api/src/main/java/org/onosproject/ui/UiTopoLayoutService.java
index 0aa7db0..989c807 100644
--- a/core/api/src/main/java/org/onosproject/ui/UiTopoLayoutService.java
+++ b/core/api/src/main/java/org/onosproject/ui/UiTopoLayoutService.java
@@ -16,8 +16,9 @@
 package org.onosproject.ui;
 
 import org.onosproject.ui.model.topo.UiTopoLayout;
+import org.onosproject.ui.model.topo.UiTopoLayoutId;
 
-import java.util.List;
+import java.util.Set;
 
 /**
  * Service for managing {@link UiTopoLayout} instances.
@@ -25,20 +26,28 @@
 public interface UiTopoLayoutService {
 
     /**
-     * Returns the list of available layouts.
+     * Returns the set of available layouts.
      *
-     * @return available layouts
+     * @return set of available layouts
      */
-    List<UiTopoLayout> getLayouts();
+    Set<UiTopoLayout> getLayouts();
 
     /**
-     * Adds a layout to the system.
+     * Adds a layout to the system or updates an existing one.
      *
-     * @param layout the layout to add
+     * @param layout the layout to add or update
      * @return an indication of success
      */
     boolean addLayout(UiTopoLayout layout);
 
+
+    /**
+     * Returns the layout with the specified identifier.
+     * @param layoutId layout identifier
+     * @return layout or null if no such layout is found
+     */
+    UiTopoLayout getLayout(UiTopoLayoutId layoutId);
+
     /**
      * Removes a layout from the system.
      *
diff --git a/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopoLayout.java b/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopoLayout.java
index 105b0da..289bb8f 100644
--- a/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopoLayout.java
+++ b/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopoLayout.java
@@ -24,6 +24,37 @@
  */
 public class UiTopoLayout {
 
-    private Region backingRegion;
+    private final UiTopoLayoutId id;
+    private final Region region;
 
+    /**
+     * Created a new UI topology layout.
+     *
+     * @param id     layout identifier
+     * @param region backing region
+     */
+    public UiTopoLayout(UiTopoLayoutId id, Region region) {
+        this.id = id;
+        this.region = region;
+    }
+
+    /**
+     * Returns the UI layout identifier.
+     *
+     * @return identifier of the layout
+     */
+    public UiTopoLayoutId id() {
+        return id;
+    }
+
+    /**
+     * Returns the backing region with which this layout is associated.
+     *
+     * @return backing region
+     */
+    public Region region() {
+        return region;
+    }
+
+    // TODO: additional properties pertinent to the layout
 }
diff --git a/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopoLayoutId.java b/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopoLayoutId.java
new file mode 100644
index 0000000..2fa8717
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopoLayoutId.java
@@ -0,0 +1,43 @@
+/*
+ * 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.model.topo;
+
+import org.onlab.util.Identifier;
+
+/**
+ * Identifier of a topology layout.
+ */
+public final class UiTopoLayoutId extends Identifier<String> {
+
+    // For serialization
+    private UiTopoLayoutId() {
+    }
+
+    private UiTopoLayoutId(String value) {
+        super(value);
+    }
+
+    /**
+     * Returns the layout identifier created from the specified value.
+     *
+     * @param value string value
+     * @return layout identifier
+     */
+    public static UiTopoLayoutId layoutId(String value) {
+        return new UiTopoLayoutId(value);
+    }
+}
