diff --git a/src/test/java/net/onrc/onos/apps/proxyarp/ProxyArpManagerTest.java b/src/test/java/net/onrc/onos/apps/proxyarp/ProxyArpManagerTest.java
index 347d31f..ee70f32 100644
--- a/src/test/java/net/onrc/onos/apps/proxyarp/ProxyArpManagerTest.java
+++ b/src/test/java/net/onrc/onos/apps/proxyarp/ProxyArpManagerTest.java
@@ -26,7 +26,7 @@
 import net.onrc.onos.core.packet.ARP;
 import net.onrc.onos.core.packet.Ethernet;
 import net.onrc.onos.core.packet.IPv4;
-import net.onrc.onos.core.topology.Device;
+import net.onrc.onos.core.topology.Host;
 import net.onrc.onos.core.topology.ITopologyService;
 import net.onrc.onos.core.topology.Topology;
 import net.onrc.onos.core.topology.Port;
@@ -79,7 +79,7 @@
     Topology topology;
     IEventChannel eg;
     IEventChannelListener el;
-    Device dev1;
+    Host host1;
     Port inPort1, outPort1;
     Switch sw1;
     ArpCache arpCache;
@@ -219,7 +219,7 @@
 
         //Mock Topology related data
         topology = EasyMock.createMock(Topology.class);
-        dev1 = EasyMock.createMock(Device.class);
+        host1 = EasyMock.createMock(Host.class);
         inPort1 = EasyMock.createMock(Port.class);
         outPort1 = EasyMock.createMock(Port.class);
         sw1 = EasyMock.createMock(Switch.class);
@@ -284,7 +284,7 @@
         EasyMock.replay(context, floodligthProviderService, configInfoService,
                 restApiService, datagridService, flowPusherService,
                 topologyService, hostService, packetService, topology, eg,
-                el, dev1, inPort1, sw1);
+                el, host1, inPort1, sw1);
         arpManager.init(context);
         arpManager.startUp(context);
         assertEquals(defaultStrAgingMsec, String.valueOf(arpManager.getArpEntryTimeout()));
@@ -303,7 +303,7 @@
         EasyMock.replay(context, floodligthProviderService, configInfoService,
                 restApiService, datagridService, flowPusherService,
                 topologyService, hostService, packetService, topology,
-                eg, el, dev1, inPort1, sw1);
+                eg, el, host1, inPort1, sw1);
         arpManager.init(context);
         arpManager.startUp(context);
         assertEquals(defaultStrAgingMsec, String.valueOf(arpManager.getArpEntryTimeout()));
@@ -321,7 +321,7 @@
         EasyMock.replay(context, floodligthProviderService, configInfoService,
                 restApiService, datagridService, flowPusherService,
                 topologyService, hostService, packetService, topology,
-                eg, el, dev1, inPort1, sw1);
+                eg, el, host1, inPort1, sw1);
         arpManager.init(context);
         arpManager.startUp(context);
         assertEquals(strAgingMsec, String.valueOf(arpManager.getArpEntryTimeout()));
@@ -336,7 +336,7 @@
         EasyMock.replay(context, floodligthProviderService, configInfoService,
                 restApiService, datagridService, flowPusherService,
                 topologyService, hostService, packetService, topology,
-                eg, el, dev1, inPort1, sw1);
+                eg, el, host1, inPort1, sw1);
         arpManager.init(context);
         arpManager.startUp(context);
 
@@ -355,7 +355,7 @@
         EasyMock.replay(context, floodligthProviderService, configInfoService,
                 restApiService, datagridService, flowPusherService,
                 topologyService, hostService, packetService, topology,
-                eg, el, dev1, inPort1, sw1);
+                eg, el, host1, inPort1, sw1);
         arpManager.init(context);
         arpManager.startUp(context);
         List<String> list = arpManager.getMappings();
@@ -372,7 +372,7 @@
         EasyMock.replay(context, floodligthProviderService, configInfoService,
                 restApiService, datagridService, flowPusherService,
                 topologyService, hostService, packetService, topology,
-                eg, el, dev1, inPort1, sw1);
+                eg, el, host1, inPort1, sw1);
         arpManager.init(context);
         arpManager.startUp(context);
         arpManager.receive(sw1, inPort1, ethRarpRequest);
@@ -388,7 +388,7 @@
         EasyMock.replay(context, floodligthProviderService, configInfoService,
                 restApiService, datagridService, flowPusherService,
                 topologyService, hostService, packetService, topology,
-                eg, el, dev1, inPort1, sw1);
+                eg, el, host1, inPort1, sw1);
         arpManager.init(context);
         arpManager.startUp(context);
         arpManager.receive(sw1, inPort1, ethArpOtherOp);
@@ -410,7 +410,7 @@
         EasyMock.replay(context, floodligthProviderService, configInfoService,
                 restApiService, datagridService, flowPusherService,
                 topologyService, hostService, packetService, topology,
-                eg, el, dev1, inPort1, sw1);
+                eg, el, host1, inPort1, sw1);
         arpManager.init(context);
         arpManager.startUp(context);
         arpManager.receive(sw1, inPort1, ethArpReply);
@@ -429,7 +429,7 @@
         EasyMock.replay(context, floodligthProviderService, configInfoService,
                 restApiService, datagridService, flowPusherService,
                 topologyService, hostService, packetService, topology,
-                eg, el, dev1, inPort1, sw1);
+                eg, el, host1, inPort1, sw1);
         arpManager.init(context);
         arpManager.startUp(context);
         arpManager.receive(sw1, inPort1, ethArpRequest);
@@ -449,15 +449,15 @@
                     EasyMock.anyLong(), EasyMock.anyShort())).andReturn(false);
         topology.acquireReadLock();
         EasyMock.expectLastCall();
-        EasyMock.expect(topology.getDeviceByMac(dstMac)).andReturn(dev1);
+        EasyMock.expect(topology.getHostByMac(dstMac)).andReturn(host1);
         topology.releaseReadLock();
         EasyMock.expectLastCall();
-        EasyMock.expect(dev1.getAttachmentPoints()).andReturn(portList);
+        EasyMock.expect(host1.getAttachmentPoints()).andReturn(portList);
         eg.addTransientEntry(EasyMock.anyLong(), EasyMock.anyObject());
         EasyMock.expectLastCall();
 
         EasyMock.replay(context, configInfoService, restApiService, floodligthProviderService,
-                topologyService, datagridService, eg, topology, dev1, inPort1, outPort1, sw1);
+                topologyService, datagridService, eg, topology, host1, inPort1, outPort1, sw1);
         arpManager.init(context);
         arpManager.startUp(context);
         arpManager.receive(sw1, inPort1, ethArpRequest);
diff --git a/src/test/java/net/onrc/onos/core/datastore/topology/KVTopologyTest.java b/src/test/java/net/onrc/onos/core/datastore/topology/KVTopologyTest.java
index 60390d8..87325b4 100644
--- a/src/test/java/net/onrc/onos/core/datastore/topology/KVTopologyTest.java
+++ b/src/test/java/net/onrc/onos/core/datastore/topology/KVTopologyTest.java
@@ -222,7 +222,7 @@
             }
         } catch (ObjectExistsException e) {
             e.printStackTrace();
-            fail("Device creation failed " + e);
+            fail("Host creation failed " + e);
         }
 
         KVSwitch sw2 = new KVSwitch(DPID2, NAMESPACE);
@@ -245,7 +245,7 @@
             for (WriteOp op : groupOp) {
                 System.err.println(op);
             }
-            fail("Some of Switch/Port/Device creation failed");
+            fail("Some of Switch/Port/Host creation failed");
         } else {
             assertNotEquals(VERSION_NONEXISTENT, sw2.getVersion());
             assertEquals(DPID2, sw2.getDpid());
diff --git a/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java b/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java
index 76ef3b0..119acc6 100644
--- a/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java
@@ -18,7 +18,7 @@
 import net.onrc.onos.core.intent.IntentOperation.Operator;
 import net.onrc.onos.core.intent.IntentOperationList;
 import net.onrc.onos.core.intent.ShortestPathIntent;
-import net.onrc.onos.core.topology.DeviceEvent;
+import net.onrc.onos.core.topology.HostEvent;
 import net.onrc.onos.core.topology.LinkEvent;
 import net.onrc.onos.core.topology.MockTopology;
 import net.onrc.onos.core.topology.PortEvent;
@@ -456,7 +456,7 @@
         //  Remove one of the links and check results
         final List<SwitchEvent> emptySwitchEvents = new LinkedList<>();
         final List<PortEvent> emptyPortEvents = new LinkedList<>();
-        final List<DeviceEvent> emptyDeviceEvents = new LinkedList<>();
+        final List<HostEvent> emptyHostEvents = new LinkedList<>();
         final List<LinkEvent> addedLinkEvents = new LinkedList<>();
         final List<LinkEvent> removedLinkEvents = new LinkedList<>();
         TopologyEvents topologyEvents;
@@ -478,8 +478,8 @@
                                             emptyPortEvents,
                                             addedLinkEvents,
                                             removedLinkEvents,
-                                            emptyDeviceEvents,
-                                            emptyDeviceEvents);
+                                            emptyHostEvents,
+                                            emptyHostEvents);
 
         runtime.topologyEvents(topologyEvents);
 
@@ -692,7 +692,7 @@
         //  Remove one of the links and check results
         final List<SwitchEvent> emptySwitchEvents = new LinkedList<>();
         final List<PortEvent> emptyPortEvents = new LinkedList<>();
-        final List<DeviceEvent> emptyDeviceEvents = new LinkedList<>();
+        final List<HostEvent> emptyHostEvents = new LinkedList<>();
         final List<LinkEvent> addedLinkEvents = new LinkedList<>();
         final List<LinkEvent> removedLinkEvents = new LinkedList<>();
         TopologyEvents topologyEvents;
@@ -714,8 +714,8 @@
                                             emptyPortEvents,
                                             addedLinkEvents,
                                             removedLinkEvents,
-                                            emptyDeviceEvents,
-                                            emptyDeviceEvents);
+                                            emptyHostEvents,
+                                            emptyHostEvents);
 
         runtime.topologyEvents(topologyEvents);
 
@@ -767,8 +767,8 @@
                                             emptyPortEvents,
                                             addedLinkEvents,
                                             removedLinkEvents,
-                                            emptyDeviceEvents,
-                                            emptyDeviceEvents);
+                                            emptyHostEvents,
+                                            emptyHostEvents);
 
         runtime.topologyEvents(topologyEvents);
 
diff --git a/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java b/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java
index 08150ec..b7de7b0 100644
--- a/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java
@@ -29,7 +29,7 @@
 import net.onrc.onos.core.intent.ShortestPathIntent;
 import net.onrc.onos.core.intent.runtime.web.IntentWebRoutable;
 import net.onrc.onos.core.registry.IControllerRegistryService;
-import net.onrc.onos.core.topology.DeviceEvent;
+import net.onrc.onos.core.topology.HostEvent;
 import net.onrc.onos.core.topology.ITopologyListener;
 import net.onrc.onos.core.topology.ITopologyService;
 import net.onrc.onos.core.topology.LinkEvent;
@@ -231,8 +231,8 @@
         List<PortEvent> removedPortEvents = new LinkedList<>();
         List<LinkEvent> addedLinkEvents = new LinkedList<>();
         List<LinkEvent> removedLinkEvents = new LinkedList<>();
-        List<DeviceEvent> addedDeviceEvents = new LinkedList<>();
-        List<DeviceEvent> removedDeviceEvents = new LinkedList<>();
+        List<HostEvent> addedHostEvents = new LinkedList<>();
+        List<HostEvent> removedHostEvents = new LinkedList<>();
         TopologyEvents topologyEvents;
 
         // create shortest path intents
@@ -283,8 +283,8 @@
                                             removedPortEvents,
                                             addedLinkEvents,
                                             removedLinkEvents,
-                                            addedDeviceEvents,
-                                            removedDeviceEvents);
+                                            addedHostEvents,
+                                            removedHostEvents);
 
         runtime1.topologyEvents(topologyEvents);
         System.out.println("*** Link goes down. ***");
@@ -317,8 +317,8 @@
                                             removedPortEvents,
                                             addedLinkEvents,
                                             removedLinkEvents,
-                                            addedDeviceEvents,
-                                            removedDeviceEvents);
+                                            addedHostEvents,
+                                            removedHostEvents);
 
         runtime1.topologyEvents(topologyEvents);
         System.out.println("*** Link goes up. ***");
diff --git a/src/test/java/net/onrc/onos/core/topology/MockTopology.java b/src/test/java/net/onrc/onos/core/topology/MockTopology.java
index d285504..9ceaa2a 100644
--- a/src/test/java/net/onrc/onos/core/topology/MockTopology.java
+++ b/src/test/java/net/onrc/onos/core/topology/MockTopology.java
@@ -128,16 +128,16 @@
         Port port43 = addPort(sw4, 43L); // sw4 -> sw3
 
         MACAddress mac1 = MACAddress.valueOf("00:44:33:22:11:00");
-        DeviceImpl dev1 = new DeviceImpl(this, mac1);
+        HostImpl dev1 = new HostImpl(this, mac1);
         dev1.addAttachmentPoint(port15);
         dev1.setLastSeenTime(1L);
-        this.putDevice(dev1);
+        this.putHost(dev1);
 
         MACAddress mac3 = MACAddress.valueOf("00:11:22:33:44:55");
-        DeviceImpl dev3 = new DeviceImpl(this, mac3);
+        HostImpl dev3 = new HostImpl(this, mac3);
         dev3.addAttachmentPoint(port35);
         dev3.setLastSeenTime(1L);
-        this.putDevice(dev3);
+        this.putHost(dev3);
 
         addBidirectionalLinks(1L, 12L, 2L, 21L);
         addBidirectionalLinks(2L, 23L, 3L, 32L);
diff --git a/src/test/java/net/onrc/onos/core/topology/TopologyImplTest.java b/src/test/java/net/onrc/onos/core/topology/TopologyImplTest.java
index bffca36..cb21b8d 100644
--- a/src/test/java/net/onrc/onos/core/topology/TopologyImplTest.java
+++ b/src/test/java/net/onrc/onos/core/topology/TopologyImplTest.java
@@ -51,9 +51,9 @@
 
             // Create a host for each switch
             MACAddress devMac = MACAddress.valueOf(switchID);
-            DeviceImpl testHost = new DeviceImpl(testTopology, devMac);
+            HostImpl testHost = new HostImpl(testTopology, devMac);
             testHost.addAttachmentPoint(hostPort);
-            testTopology.putDevice(testHost);
+            testTopology.putHost(testHost);
         }
 
         // Create one bidirectional link b/w two switches to construct a ring topology
@@ -188,7 +188,7 @@
             MACAddress devMac = MACAddress.valueOf(switchID);
 
             // Verify the device is in the graphDB
-            assertNotNull(testTopology.getDeviceByMac(devMac));
+            assertNotNull(testTopology.getHostByMac(devMac));
         }
     }
 
@@ -198,11 +198,11 @@
     @Test
     public void testRemoveDevice() {
         int devCount = 0;
-        Iterator<Device> itr = testTopology.getDevices().iterator();
+        Iterator<Host> itr = testTopology.getHosts().iterator();
         while (itr.hasNext()) {
-            Device currDev = itr.next();
-            testTopology.removeDevice(currDev);
-            testTopology.getDeviceByMac(currDev.getMacAddress());
+            Host currDev = itr.next();
+            testTopology.removeHost(currDev);
+            testTopology.getHostByMac(currDev.getMacAddress());
             devCount++;
         }
 
@@ -242,9 +242,9 @@
     @Test
     public void testRemoveSwitch() {
         for (long switchID = 1; switchID <= TEST_SWITCH_NUM; switchID++) {
-            Iterator<Device> itr = testTopology.getSwitch(new Dpid(switchID)).getDevices().iterator();
+            Iterator<Host> itr = testTopology.getSwitch(new Dpid(switchID)).getHosts().iterator();
             while (itr.hasNext()) {
-                testTopology.removeDevice(itr.next());
+                testTopology.removeHost(itr.next());
             }
             testTopology.removeSwitch(switchID);
 
diff --git a/src/test/java/net/onrc/onos/core/topology/TopologyManagerTest.java b/src/test/java/net/onrc/onos/core/topology/TopologyManagerTest.java
index 597f534..e4f6c8c 100644
--- a/src/test/java/net/onrc/onos/core/topology/TopologyManagerTest.java
+++ b/src/test/java/net/onrc/onos/core/topology/TopologyManagerTest.java
@@ -82,12 +82,12 @@
                 anyObject(PortEvent.class)))
                 .andReturn(true).anyTimes();
 
-        expect(dataStoreService.addDevice(
-                anyObject(DeviceEvent.class)))
+        expect(dataStoreService.addHost(
+                anyObject(HostEvent.class)))
                 .andReturn(true).anyTimes();
 
-        expect(dataStoreService.removeDevice(
-                anyObject(DeviceEvent.class)))
+        expect(dataStoreService.removeHost(
+                anyObject(HostEvent.class)))
                 .andReturn(true).anyTimes();
 
         expect(dataStoreService.addLink(
@@ -210,11 +210,11 @@
         SwitchPort sp = new SwitchPort(swDPId, portId);
         List<SwitchPort> spLists = new ArrayList<SwitchPort>();
         spLists.add(sp);
-        DeviceEvent deviceEvent = new DeviceEvent(devMac);
-        deviceEvent.setAttachmentPoints(spLists);
+        HostEvent hostEvent = new HostEvent(devMac);
+        hostEvent.setAttachmentPoints(spLists);
 
         // Call the topologyManager function for adding a device
-        theTopologyManager.putDeviceDiscoveryEvent(deviceEvent);
+        theTopologyManager.putHostDiscoveryEvent(hostEvent);
 
         // Verify the function calls
         verify(eventChannel);
@@ -240,11 +240,11 @@
         SwitchPort sp = new SwitchPort(swDPId, portId);
         List<SwitchPort> spLists = new ArrayList<SwitchPort>();
         spLists.add(sp);
-        DeviceEvent deviceEvent = new DeviceEvent(devMac);
-        deviceEvent.setAttachmentPoints(spLists);
+        HostEvent hostEvent = new HostEvent(devMac);
+        hostEvent.setAttachmentPoints(spLists);
 
         // Call the topologyManager function for removing a device
-        theTopologyManager.removeDeviceDiscoveryEvent(deviceEvent);
+        theTopologyManager.removeHostDiscoveryEvent(hostEvent);
 
         // Verify the function calls
         verify(eventChannel);
