diff --git a/net/core/trivial/pom.xml b/net/core/trivial/pom.xml
new file mode 100644
index 0000000..d4998ba
--- /dev/null
+++ b/net/core/trivial/pom.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onlab.onos</groupId>
+        <artifactId>onos-core</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>onos-core-trivial</artifactId>
+    <packaging>bundle</packaging>
+
+    <description>ONOS network control trivial implementations of core subsystems</description>
+
+</project>
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/GreetManager.java b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/GreetManager.java
new file mode 100644
index 0000000..2b01396
--- /dev/null
+++ b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/GreetManager.java
@@ -0,0 +1,52 @@
+package org.onlab.onos.net.trivial.impl;
+
+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.Service;
+import org.onlab.onos.net.GreetService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Trivial implementation of the seed service to demonstrate component and
+ * service annotations.
+ */
+@Component(immediate = true)
+@Service
+public class GreetManager implements GreetService {
+
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
+    private final Set<String> names = new HashSet<>();
+
+    @Override
+    public synchronized String yo(String name) {
+        checkNotNull(name, "Name cannot be null");
+        names.add(name);
+        log.info("Greeted '{}'", name);
+        return "Whazup " + name + "?";
+    }
+
+    @Override
+    public synchronized Iterable<String> names() {
+        return ImmutableSet.copyOf(names);
+    }
+
+    @Activate
+    public void activate() {
+        log.info("SeedManager started");
+    }
+
+    @Deactivate
+    public void deactivate() {
+        log.info("SeedManager stopped");
+    }
+
+}
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
new file mode 100644
index 0000000..53d4ed9
--- /dev/null
+++ b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
@@ -0,0 +1,96 @@
+package org.onlab.onos.net.trivial.impl;
+
+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.Service;
+import org.onlab.onos.net.DeviceId;
+import org.onlab.onos.net.MastershipRole;
+import org.onlab.onos.net.device.DeviceDescription;
+import org.onlab.onos.net.device.DeviceProvider;
+import org.onlab.onos.net.device.DeviceProviderBroker;
+import org.onlab.onos.net.device.DeviceProviderService;
+import org.onlab.onos.net.device.PortDescription;
+import org.onlab.onos.net.provider.AbstractProviderBroker;
+import org.onlab.onos.net.provider.AbstractProviderService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+
+/**
+ * Provides basic implementation of the device SB & NB APIs.
+ */
+@Component(immediate = true)
+@Service
+public class SimpleDeviceManager implements DeviceProviderBroker {
+
+    private Logger log = LoggerFactory.getLogger(SimpleDeviceManager.class);
+
+    private final DeviceProviderBroker broker = new InternalBroker();
+
+    @Activate
+    public void activate() {
+        log.info("Started");
+    }
+
+    @Deactivate
+    public void deactivate() {
+        log.info("Stopped");
+    }
+
+    @Override
+    public DeviceProviderService register(DeviceProvider provider) {
+        log.info("Registering provider {}", provider.id());
+        return broker.register(provider);
+    }
+
+    @Override
+    public void unregister(DeviceProvider provider) {
+        log.info("Unregistering provider {}", provider.id());
+        broker.unregister(provider);
+    }
+
+    // Internal delegate for tracking various providers and issuing them a
+    // personalized provider service.
+    private class InternalBroker extends AbstractProviderBroker<DeviceProvider, DeviceProviderService>
+            implements DeviceProviderBroker {
+        @Override
+        protected DeviceProviderService createProviderService(DeviceProvider provider) {
+            return new InternalDeviceProviderService(provider);
+        }
+    }
+
+    // Personalized device provider service issued to the supplied provider.
+    private class InternalDeviceProviderService extends AbstractProviderService<DeviceProvider>
+            implements DeviceProviderService {
+
+        public InternalDeviceProviderService(DeviceProvider provider) {
+            super(provider);
+        }
+
+        @Override
+        public MastershipRole deviceConnected(DeviceId deviceId, DeviceDescription deviceDescription) {
+            log.info("Device {} connected: {}", deviceId, deviceDescription);
+            return MastershipRole.MASTER;
+        }
+
+        @Override
+        public void deviceDisconnected(DeviceId deviceId) {
+            log.info("Device {} disconnected", deviceId);
+
+        }
+
+        @Override
+        public void updatePorts(DeviceId deviceId, List<PortDescription> ports) {
+            // FIXME: fix the interface to accept DeviceId separately
+            log.info("Device {} ports updated: {}", ports);
+
+        }
+
+        @Override
+        public void portStatusChanged(DeviceId deviceId, PortDescription port) {
+            log.info("Device {} port status changed: {}", deviceId, port);
+        }
+    }
+}
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SomeOtherComponent.java b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SomeOtherComponent.java
new file mode 100644
index 0000000..e040643
--- /dev/null
+++ b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SomeOtherComponent.java
@@ -0,0 +1,36 @@
+package org.onlab.onos.net.trivial.impl;
+
+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.onlab.onos.net.GreetService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Example of a component that does not provide any service, but consumes one.
+ */
+@Component(immediate = true)
+public class SomeOtherComponent {
+
+    private final Logger log = LoggerFactory.getLogger(SomeOtherComponent.class);
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected GreetService service;
+    // protected to allow injection for testing;
+    // alternative is to write bindSeedService and unbindSeedService, which is more code
+
+    @Activate
+    public void activate() {
+        log.info("SomeOtherComponent started");
+        service.yo("neighbour");
+    }
+
+    @Deactivate
+    public void deactivate() {
+        log.info("SomeOtherComponent stopped");
+    }
+
+}
diff --git a/net/core/trivial/src/main/javadoc/org/onlab/onos/net/trivial/impl/package.html b/net/core/trivial/src/main/javadoc/org/onlab/onos/net/trivial/impl/package.html
new file mode 100644
index 0000000..ba285bd
--- /dev/null
+++ b/net/core/trivial/src/main/javadoc/org/onlab/onos/net/trivial/impl/package.html
@@ -0,0 +1,3 @@
+<body>
+ONOS core implementations.
+</body>
\ No newline at end of file
diff --git a/net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/GreetManagerTest.java b/net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/GreetManagerTest.java
new file mode 100644
index 0000000..3bbffde
--- /dev/null
+++ b/net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/GreetManagerTest.java
@@ -0,0 +1,31 @@
+package org.onlab.onos.net.trivial.impl;
+
+import org.junit.Test;
+import org.onlab.onos.net.GreetService;
+
+import java.util.Iterator;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+/**
+ * Example of a component &amp; service implementation unit test.
+ */
+public class GreetManagerTest {
+
+    @Test
+    public void basics() {
+        GreetService service = new GreetManager();
+        assertEquals("incorrect greeting", "Whazup dude?", service.yo("dude"));
+
+        Iterator<String> names = service.names().iterator();
+        assertEquals("incorrect name", "dude", names.next());
+        assertFalse("no more names expected", names.hasNext());
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void nullArg() {
+        new GreetManager().yo(null);
+    }
+
+}
