diff --git a/net/api/src/main/java/org/onlab/onos/net/AbstractElement.java b/net/api/src/main/java/org/onlab/onos/net/AbstractElement.java
new file mode 100644
index 0000000..01341a5
--- /dev/null
+++ b/net/api/src/main/java/org/onlab/onos/net/AbstractElement.java
@@ -0,0 +1,28 @@
+package org.onlab.onos.net;
+
+import org.onlab.onos.net.provider.ProviderId;
+
+/**
+ * Base implementation of network elements, i.e. devices or hosts.
+ */
+public class AbstractElement extends AbstractModel implements Element {
+
+    protected final ElementId id;
+
+    /**
+     * Creates a network element attributed to the specified provider.
+     *
+     * @param providerId identity of the provider
+     * @param id         element identifier
+     */
+    protected AbstractElement(ProviderId providerId, ElementId id) {
+        super(providerId);
+        this.id = id;
+    }
+
+    @Override
+    public ElementId id() {
+        return id;
+    }
+
+}
diff --git a/net/api/src/main/java/org/onlab/onos/net/AbstractModel.java b/net/api/src/main/java/org/onlab/onos/net/AbstractModel.java
new file mode 100644
index 0000000..e195fde
--- /dev/null
+++ b/net/api/src/main/java/org/onlab/onos/net/AbstractModel.java
@@ -0,0 +1,26 @@
+package org.onlab.onos.net;
+
+import org.onlab.onos.net.provider.ProviderId;
+
+/**
+ * Base implementation of a network model entity.
+ */
+public class AbstractModel implements Provided {
+
+    private final ProviderId providerId;
+
+    /**
+     * Creates a model entity attributed to the specified provider.
+     *
+     * @param providerId identity of the provider
+     */
+    protected AbstractModel(ProviderId providerId) {
+        this.providerId = providerId;
+    }
+
+    @Override
+    public ProviderId providerId() {
+        return providerId;
+    }
+
+}
diff --git a/net/api/src/main/java/org/onlab/onos/net/DefaultDevice.java b/net/api/src/main/java/org/onlab/onos/net/DefaultDevice.java
new file mode 100644
index 0000000..42a3526
--- /dev/null
+++ b/net/api/src/main/java/org/onlab/onos/net/DefaultDevice.java
@@ -0,0 +1,103 @@
+package org.onlab.onos.net;
+
+import org.onlab.onos.net.provider.ProviderId;
+
+import java.util.Objects;
+
+import static com.google.common.base.Objects.toStringHelper;
+
+/**
+ * Default device model implementation.
+ */
+public class DefaultDevice extends AbstractElement implements Device {
+
+    private final Type type;
+    private final String manufacturer;
+    private final String serialNumber;
+    private final String hwVersion;
+    private final String swVersion;
+
+    /**
+     * Creates a network element attributed to the specified provider.
+     *
+     * @param providerId   identity of the provider
+     * @param id           device identifier
+     * @param type         device type
+     * @param manufacturer device manufacturer
+     * @param hwVersion    device HW version
+     * @param swVersion    device SW version
+     * @param serialNumber device serial number
+     */
+    public DefaultDevice(ProviderId providerId, DeviceId id, Type type,
+                         String manufacturer, String hwVersion, String swVersion,
+                         String serialNumber) {
+        super(providerId, id);
+        this.type = type;
+        this.manufacturer = manufacturer;
+        this.hwVersion = hwVersion;
+        this.swVersion = swVersion;
+        this.serialNumber = serialNumber;
+    }
+
+    @Override
+    public DeviceId id() {
+        return (DeviceId) super.id();
+    }
+
+    @Override
+    public Type type() {
+        return type;
+    }
+
+    @Override
+    public String manufacturer() {
+        return manufacturer;
+    }
+
+    @Override
+    public String hwVersion() {
+        return hwVersion;
+    }
+
+    @Override
+    public String swVersion() {
+        return swVersion;
+    }
+
+    @Override
+    public String serialNumber() {
+        return serialNumber;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, type, manufacturer, hwVersion, swVersion, serialNumber);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof DefaultDevice) {
+            final DefaultDevice other = (DefaultDevice) obj;
+            return Objects.equals(this.id, other.id) &&
+                    Objects.equals(this.type, other.type) &&
+                    Objects.equals(this.manufacturer, other.manufacturer) &&
+                    Objects.equals(this.hwVersion, other.hwVersion) &&
+                    Objects.equals(this.swVersion, other.swVersion) &&
+                    Objects.equals(this.serialNumber, other.serialNumber);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this)
+                .add("id", id)
+                .add("type", type)
+                .add("manufacturer", manufacturer)
+                .add("hwVersion", hwVersion)
+                .add("swVersion", swVersion)
+                .add("serialNumber", serialNumber)
+                .toString();
+    }
+
+}
diff --git a/net/api/src/test/java/org/onlab/onos/net/DefaultDeviceTest.java b/net/api/src/test/java/org/onlab/onos/net/DefaultDeviceTest.java
new file mode 100644
index 0000000..1d174ca
--- /dev/null
+++ b/net/api/src/test/java/org/onlab/onos/net/DefaultDeviceTest.java
@@ -0,0 +1,54 @@
+package org.onlab.onos.net;
+
+import com.google.common.testing.EqualsTester;
+import org.junit.Test;
+import org.onlab.onos.net.provider.ProviderId;
+
+import java.net.URI;
+
+import static org.junit.Assert.assertEquals;
+import static org.onlab.onos.net.Device.Type.SWITCH;
+
+/**
+ * Test of the default device model entity.
+ */
+public class DefaultDeviceTest {
+
+    private static final ProviderId PID = new ProviderId("foo");
+    private static final DeviceId DID1 = new DeviceId(URI.create("of:foo"));
+    private static final DeviceId DID2 = new DeviceId(URI.create("of:bar"));
+    private static final String MFR = "whitebox";
+    private static final String HW = "1.1.x";
+    private static final String SW = "3.9.1";
+    private static final String SN1 = "43311-12345";
+    private static final String SN2 = "42346-43512";
+
+
+    @Test
+    public void testEquality() {
+        Device d1 = new DefaultDevice(PID, DID1, SWITCH, MFR, HW, SW, SN1);
+        Device d2 = new DefaultDevice(PID, DID1, SWITCH, MFR, HW, SW, SN1);
+        Device d3 = new DefaultDevice(PID, DID2, SWITCH, MFR, HW, SW, SN2);
+        Device d4 = new DefaultDevice(PID, DID2, SWITCH, MFR, HW, SW, SN2);
+        Device d5 = new DefaultDevice(PID, DID2, SWITCH, MFR, HW, SW, SN1);
+
+        new EqualsTester().addEqualityGroup(d1, d2)
+                .addEqualityGroup(d3, d4)
+                .addEqualityGroup(d5)
+                .testEquals();
+    }
+
+    @Test
+    public void basics() {
+        Device device = new DefaultDevice(PID, DID1, SWITCH, MFR, HW, SW, SN1);
+        assertEquals("incorrect provider", PID, device.providerId());
+        assertEquals("incorrect id", DID1, device.id());
+        assertEquals("incorrect type", SWITCH, device.type());
+        assertEquals("incorrect manufacturer", MFR, device.manufacturer());
+        assertEquals("incorrect hw", HW, device.hwVersion());
+        assertEquals("incorrect sw", SW, device.swVersion());
+        assertEquals("incorrect serial", SN1, device.serialNumber());
+        assertEquals("incorrect serial", SN1, device.serialNumber());
+    }
+
+}
diff --git a/net/api/src/test/java/org/onlab/onos/net/device/DefaultDeviceDescriptionTest.java b/net/api/src/test/java/org/onlab/onos/net/device/DefaultDeviceDescriptionTest.java
new file mode 100644
index 0000000..9d06edf
--- /dev/null
+++ b/net/api/src/test/java/org/onlab/onos/net/device/DefaultDeviceDescriptionTest.java
@@ -0,0 +1,36 @@
+package org.onlab.onos.net.device;
+
+import org.junit.Test;
+
+import java.net.URI;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.onlab.onos.net.Device.Type.SWITCH;
+
+/**
+ * Test of the default device description.
+ */
+public class DefaultDeviceDescriptionTest {
+
+    private static final URI DURI = URI.create("of:foo");
+    private static final String MFR = "whitebox";
+    private static final String HW = "1.1.x";
+    private static final String SW = "3.9.1";
+    private static final String SN = "43311-12345";
+
+
+    @Test
+    public void basics() {
+        DeviceDescription device =
+                new DefaultDeviceDescription(DURI, SWITCH, MFR, HW, SW, SN);
+        assertEquals("incorrect uri", DURI, device.deviceURI());
+        assertEquals("incorrect type", SWITCH, device.type());
+        assertEquals("incorrect manufacturer", MFR, device.manufacturer());
+        assertEquals("incorrect hw", HW, device.hwVersion());
+        assertEquals("incorrect sw", SW, device.swVersion());
+        assertEquals("incorrect serial", SN, device.serialNumber());
+        assertTrue("incorrect toString", device.toString().contains("uri=of:foo"));
+    }
+
+}
