diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMapping.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMapping.java
index f51a8d1..5c98fee 100644
--- a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMapping.java
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMapping.java
@@ -18,40 +18,157 @@
 import org.onosproject.core.ApplicationId;
 import org.onosproject.net.DeviceId;
 
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
 /**
  * Default implementation class for mapping.
  */
 public class DefaultMapping implements Mapping {
+
+    private final DeviceId deviceId;
+    private final MappingKey key;
+    private final MappingValue value;
+
+    private final MappingId id;
+
+    private final Short appId;
+
+    /**
+     * Creates a mapping specified with mapping information.
+     *
+     * @param mapping mapping information
+     */
+    public DefaultMapping(Mapping mapping) {
+        this.deviceId = mapping.deviceId();
+        this.key = mapping.key();
+        this.value = mapping.value();
+        this.appId = mapping.appId();
+        this.id = mapping.id();
+    }
+
+    /**
+     * Creates a mapping specified with several parameters.
+     *
+     * @param deviceId device identifier
+     * @param key      mapping key
+     * @param value    mapping value
+     * @param id       mapping identifier
+     */
+    public DefaultMapping(DeviceId deviceId, MappingKey key, MappingValue value,
+                          MappingId id) {
+        this.deviceId = deviceId;
+        this.key = key;
+        this.value = value;
+        this.appId = (short) (id.value() >>> 48);
+        this.id = id;
+    }
+
     @Override
     public MappingId id() {
-        return null;
+        return id;
     }
 
     @Override
     public short appId() {
-        return 0;
+        return appId;
     }
 
     @Override
     public DeviceId deviceId() {
-        return null;
+        return deviceId;
+    }
+
+    @Override
+    public MappingKey key() {
+        return key;
+    }
+
+    @Override
+    public MappingValue value() {
+        return value;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(deviceId, key, value, id);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof DefaultMapping) {
+            DefaultMapping that = (DefaultMapping) obj;
+            return Objects.equals(deviceId, that.deviceId) &&
+                    Objects.equals(key, that.key) &&
+                    Objects.equals(value, that.value) &&
+                    Objects.equals(id, that.id);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this)
+                .add("id", Long.toHexString(id.value()))
+                .add("deviceId", deviceId)
+                .add("key", key)
+                .add("value", value)
+                .toString();
     }
 
     public static final class Builder implements Mapping.Builder {
 
+        private MappingId id;
+        private ApplicationId appId;
+        private DeviceId deviceId;
+        private MappingKey key = new DefaultMappingKey();
+        private MappingValue value = new DefaultMappingValue();
+
+        @Override
+        public Mapping.Builder withId(long id) {
+            this.id = MappingId.valueOf(id);
+            return this;
+        }
+
         @Override
         public Mapping.Builder fromApp(ApplicationId appId) {
-            return null;
+            this.appId = appId;
+            return this;
         }
 
         @Override
         public Mapping.Builder forDevice(DeviceId deviceId) {
-            return null;
+            this.deviceId = deviceId;
+            return this;
+        }
+
+        @Override
+        public Mapping.Builder withKey(MappingKey key) {
+            this.key = key;
+            return this;
+        }
+
+        @Override
+        public Mapping.Builder withValue(MappingValue value) {
+            this.value = value;
+            return this;
         }
 
         @Override
         public Mapping build() {
-            return null;
+
+            checkArgument((id != null) ^ (appId != null), "Either an application" +
+                    " id or a mapping id must be supplied");
+            checkNotNull(key, "Mapping key cannot be null");
+            checkNotNull(deviceId, "Must refer to a device");
+
+            return new DefaultMapping(deviceId, key, value, id);
         }
     }
 }
diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMappingEntry.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMappingEntry.java
index 4c7ae70..cbdce56 100644
--- a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMappingEntry.java
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMappingEntry.java
@@ -15,12 +15,41 @@
  */
 package org.onosproject.mapping;
 
+import org.slf4j.Logger;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static org.slf4j.LoggerFactory.getLogger;
+
 /**
  * Default implementation of MappingEntry.
  */
 public class DefaultMappingEntry extends DefaultMapping implements MappingEntry {
+
+    private static final Logger log = getLogger(DefaultMappingEntry.class);
+
+    private MappingEntryState state;
+
+    /**
+     * Creates a mapping entry specified with the mapping, state information.
+     *
+     * @param mapping mapping
+     * @param state   mapping state
+     */
+    public DefaultMappingEntry(Mapping mapping, MappingEntryState state) {
+        super(mapping);
+        this.state = state;
+    }
+
     @Override
     public MappingEntryState state() {
-        return null;
+        return state;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this)
+                .add("mapping", super.toString())
+                .add("state", state)
+                .toString();
     }
 }
diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMappingKey.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMappingKey.java
new file mode 100644
index 0000000..96feb4a
--- /dev/null
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMappingKey.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2017-present 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.mapping;
+
+/**
+ * Default mapping key implementation.
+ */
+public class DefaultMappingKey implements MappingKey {
+}
diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMappingValue.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMappingValue.java
new file mode 100644
index 0000000..3987218
--- /dev/null
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMappingValue.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2017-present 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.mapping;
+
+/**
+ * Default mapping value implementation.
+ */
+public class DefaultMappingValue implements MappingValue {
+}
diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/Mapping.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/Mapping.java
index 1233020..8688894 100644
--- a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/Mapping.java
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/Mapping.java
@@ -45,14 +45,28 @@
     DeviceId deviceId();
 
     /**
-     * {@inheritDoc}
+     * Obtains the mapping key that is used for query the mapping entry.
      *
+     * @return mapping key
+     */
+    MappingKey key();
+
+    /**
+     * Obtains the mapping value that is queried using the mapping key.
+     *
+     * @return mapping value
+     */
+    MappingValue value();
+
+    /**
+     * {@inheritDoc}
+     * <p>
      * Equality for mappings only considers 'match equality'. This means that
      * two mappings with the same match conditions will be equal.
      *
-     * @param   obj   the reference object with which to compare.
-     * @return  {@code true} if this object is the same as the obj
-     *          argument; {@code false} otherwise.
+     * @param obj the reference object with which to compare.
+     * @return {@code true} if this object is the same as the obj
+     * argument; {@code false} otherwise.
      */
     boolean equals(Object obj);
 
@@ -62,6 +76,14 @@
     interface Builder {
 
         /**
+         * Assigns an id value to this mapping.
+         *
+         * @param id a long value
+         * @return this builder object
+         */
+        Builder withId(long id);
+
+        /**
          * Assigns the application that built this mapping to this object.
          * The short value of the appId will be used as a basis for the
          * cookie value computation. It is expected that application use this
@@ -81,6 +103,22 @@
         Builder forDevice(DeviceId deviceId);
 
         /**
+         * Sets the mapping key for this mapping.
+         *
+         * @param key mapping key
+         * @return this builder object
+         */
+        Builder withKey(MappingKey key);
+
+        /**
+         * Sets the mapping value for this mapping.
+         *
+         * @param value mapping value
+         * @return this builder object
+         */
+        Builder withValue(MappingValue value);
+
+        /**
          * Builds a mapping object.
          *
          * @return a mapping object
diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/MappingKey.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/MappingKey.java
new file mode 100644
index 0000000..37c0a1a
--- /dev/null
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/MappingKey.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2017-present 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.mapping;
+
+/**
+ * Abstraction of key of mapping information.
+ */
+public interface MappingKey {
+}
diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/MappingValue.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/MappingValue.java
new file mode 100644
index 0000000..5c68eef
--- /dev/null
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/MappingValue.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2017-present 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.mapping;
+
+/**
+ * Abstraction of value of mapping information.
+ */
+public interface MappingValue {
+}
