diff --git a/src/main/java/net/onrc/onos/ofcontroller/core/INetMapTopologyObjects.java b/src/main/java/net/onrc/onos/ofcontroller/core/INetMapTopologyObjects.java
index 77c42b1..3cfa190 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/core/INetMapTopologyObjects.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/core/INetMapTopologyObjects.java
@@ -92,12 +92,8 @@
 		public void setPortState(Integer s);
 		
 		@JsonIgnore
-		@Incidence(label="on",direction = Direction.IN)
-		public ISwitchObject getSwitch();
-		
-		@JsonIgnore
 		@Adjacency(label="on",direction = Direction.IN)
-		public ISwitchObject getVertexSwitch();
+		public ISwitchObject getSwitch();
 				
 		@JsonProperty("devices")
 		@Adjacency(label="host")
diff --git a/src/main/java/net/onrc/onos/util/GraphDBOperation.java b/src/main/java/net/onrc/onos/util/GraphDBOperation.java
index df68282..950741d 100644
--- a/src/main/java/net/onrc/onos/util/GraphDBOperation.java
+++ b/src/main/java/net/onrc/onos/util/GraphDBOperation.java
@@ -174,7 +174,7 @@
 	public IDeviceObject searchDevice(String macAddr) {
 		// TODO Auto-generated method stub
 		FramedGraph<TitanGraph> fg = conn.getFramedGraph();	
-		return (fg != null && fg.getVertices("dl_address",macAddr).iterator().hasNext()) ? fg.getVertices("dl_address",macAddr,
+		return (fg != null && fg.getVertices("dl_addr",macAddr).iterator().hasNext()) ? fg.getVertices("dl_addr",macAddr,
     			IDeviceObject.class).iterator().next() : null;
     			
 	}
diff --git a/src/test/java/net/floodlightcontroller/devicemanager/internal/DeviceStorageImplTest.java b/src/test/java/net/floodlightcontroller/devicemanager/internal/DeviceStorageImplTest.java
index bedee03..cd1651f 100644
--- a/src/test/java/net/floodlightcontroller/devicemanager/internal/DeviceStorageImplTest.java
+++ b/src/test/java/net/floodlightcontroller/devicemanager/internal/DeviceStorageImplTest.java
@@ -6,31 +6,20 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import javassist.bytecode.Descriptor.Iterator;
-
 import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IDeviceObject;
 import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IPortObject;
-import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
 import net.onrc.onos.ofcontroller.core.internal.SwitchStorageImpl;
 import net.onrc.onos.ofcontroller.devicemanager.internal.DeviceStorageImpl;
 import net.onrc.onos.util.GraphDBConnection;
-import net.onrc.onos.util.GraphDBConnection.Transaction;
 import net.onrc.onos.util.GraphDBOperation;
-import net.floodlightcontroller.core.internal.TestDatabaseManager;
 import net.floodlightcontroller.devicemanager.IDevice;
 import net.floodlightcontroller.devicemanager.SwitchPort;
-import net.floodlightcontroller.flowcache.FlowReconcileManager;
-import net.floodlightcontroller.packet.IPacket;
 import net.floodlightcontroller.packet.IPv4;
-import net.floodlightcontroller.storage.memory.MemoryStorageSource;
-
 import org.easymock.EasyMock;
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.openflow.protocol.OFPacketIn;
 import org.openflow.util.HexString;
 import org.powermock.api.easymock.PowerMock;
 import org.powermock.core.classloader.annotations.PrepareForTest;
@@ -39,9 +28,6 @@
 import org.slf4j.LoggerFactory;
 
 import com.thinkaurelius.titan.core.TitanFactory;
-import com.thinkaurelius.titan.core.TitanGraph;
-import com.tinkerpop.blueprints.Vertex;
-import com.tinkerpop.gremlin.java.GremlinPipeline;
 
 //Add Powermock preparation
 @RunWith(PowerMockRunner.class)
@@ -50,29 +36,14 @@
 	
 	protected static Logger log = LoggerFactory.getLogger(SwitchStorageImpl.class);
 	
+	String conf;
 	DeviceStorageImpl deviceImpl;
-	DeviceManagerImpl deviceManager;
-	protected IPacket testARPReplyPacket_1;
-    FlowReconcileManager flowReconcileMgr;
-    MemoryStorageSource storageSource;
-    protected byte[] testARPReplyPacket_1_Srld;
-    protected OFPacketIn packetIn_1;
-    private static TitanGraph titanGraph;
-    String conf;
     private GraphDBConnection mockConn;
     private GraphDBOperation mockOpe;
     
 	@Before
 	public void setUp() throws Exception {
 
-// 		Make mock cassandra DB
-// 		Replace TitanFactory.open() to return mock DB
-//		titanGraph = TestDatabaseManager.getTestDatabase();
-//		TestDatabaseManager.populateTestData(titanGraph);
-//		PowerMock.mockStatic(TitanFactory.class);
-//		EasyMock.expect(TitanFactory.open((String)EasyMock.anyObject())).andReturn(titanGraph);
-//		PowerMock.replay(TitanFactory.class);
-		
 		PowerMock.mockStatic(GraphDBConnection.class);
 		mockConn = createMock(GraphDBConnection.class);
 		PowerMock.suppress(PowerMock.constructor(GraphDBConnection.class));
@@ -104,7 +75,7 @@
         		multiIntString = "[" + IPv4.fromIPv4Address(intValue);
         	}
         	else{
-           		multiIntString += ":" + IPv4.fromIPv4Address(intValue);
+           		multiIntString += "," + IPv4.fromIPv4Address(intValue);
         	}
         }
         return multiIntString + "]";
@@ -171,6 +142,7 @@
 			expect(mockOpe.newDevice()).andReturn(mockIDev);
 			expect(mockOpe.searchPort(switchMacAddr, portNum)).andReturn(mockIPort);
 			mockOpe.commit();
+
 			replay(mockOpe);				
 			
 			deviceImpl.init(conf);
@@ -179,6 +151,9 @@
 	        IDeviceObject obj = deviceImpl.addDevice(mockDev);	
 			assertNotNull(obj);
 			
+			verify(mockIDev);
+			verify(mockOpe);
+			
 		} catch(Exception e) {
 			fail(e.getMessage());
 		}
@@ -191,7 +166,7 @@
 	 * 	Already added device is existed.
 	 * Expect:
 	 * 	Get proper IDeviceObject still.
-	 *  Check the IDeviceObject properties set.
+	 *  Check the IDeviceObject properties set expectedly. 
 	 */
 	//@Ignore
 	@Test
@@ -259,6 +234,9 @@
 	        IDeviceObject obj2 = deviceImpl.addDevice(mockDev);
 			assertNotNull(obj2);
 			
+			verify(mockIDev);
+			verify(mockOpe);
+			
 		} catch(Exception e) {
 			fail(e.getMessage());
 		}
@@ -271,7 +249,7 @@
 	 * 	The mac address and attachment point are the same. 
 	 *  All of the other parameter are different.
 	 * Expect:
-	 * 	Changed parameters are set properly.
+	 * 	Changed parameters are set expectedly.
 	 */
 	//@Ignore
 	@Test
@@ -350,6 +328,9 @@
 			IDeviceObject obj2 = deviceImpl.updateDevice(mockDev2);
 			assertNotNull(obj2);
 			
+			verify(mockIDev);
+			verify(mockOpe);
+			
 		} catch(Exception e) {
 			fail(e.getMessage());
 		}
@@ -380,29 +361,17 @@
 			SwitchPort sp1 = new SwitchPort(switchMacAddrL, portNum);
 			SwitchPort[] sps = {sp1};
 			
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
+			expect(mockDev.getMACAddressString()).andReturn(macAddr).anyTimes();
 			expect(mockDev.getAttachmentPoints()).andReturn(sps);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
 			expect(mockDev.getIPv4Addresses()).andReturn(ipaddrs);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
 			replay(mockDev);
 			
 			//Dev2 (attached port is the same)
 			IDevice mockDev2 = createMock(Device.class);
 			String macAddr2 = "33:33:33:33:33:33";
-			expect(mockDev2.getMACAddressString()).andReturn(macAddr2);
-			expect(mockDev2.getMACAddressString()).andReturn(macAddr2);
-			expect(mockDev2.getMACAddressString()).andReturn(macAddr2);
-			expect(mockDev2.getMACAddressString()).andReturn(macAddr2);
+			expect(mockDev2.getMACAddressString()).andReturn(macAddr2).anyTimes();
 			expect(mockDev2.getIPv4Addresses()).andReturn(ipaddrs);
 			expect(mockDev2.getAttachmentPoints()).andReturn(sps);
-			expect(mockDev2.getMACAddressString()).andReturn(macAddr2);
-			expect(mockDev2.getMACAddressString()).andReturn(macAddr2);
 			replay(mockDev2);
 			
 			//Mock IPortObject 1 with dpid "00:00:00:00:00:00:0a:01" and port "1"
@@ -452,7 +421,9 @@
 			deviceImpl.removeDevice(mockDev);		
 		    IDeviceObject dev2 = deviceImpl.getDeviceByMac(macAddr);
 		    assertNull(dev2);
-		 
+		    
+			verify(mockIDev);
+			verify(mockOpe);
 		} catch(Exception e) {
 			fail(e.getMessage());
 		}
@@ -466,7 +437,7 @@
 	 * Expect:
 	 * 	1.Nothing happen when you put unregistered mac address
 	 *  2.Get the proper IDeviceObject.
-	 *  3.Check the IDeviceObject properties set.
+	 *  3.Check the IDeviceObject properties set expectedly.
 	 */
 	//@Ignore
 	@Test
@@ -486,14 +457,9 @@
 			
 			String dummyMac = "33:33:33:33:33:33";
 			
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
+			expect(mockDev.getMACAddressString()).andReturn(macAddr).anyTimes();
 			expect(mockDev.getIPv4Addresses()).andReturn(ipaddrs);
 			expect(mockDev.getAttachmentPoints()).andReturn(sps);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
 			replay(mockDev);
 			
 			//Mock IPortObject 1 with dpid "00:00:00:00:00:00:0a:01" and port "1"
@@ -538,6 +504,8 @@
 		    IDeviceObject dev = deviceImpl.getDeviceByMac(macAddr);
 		    assertNotNull(dev);
 		    
+			verify(mockIDev);
+			verify(mockOpe);   
 		} catch(Exception e) {
 			fail(e.getMessage());
 		}
@@ -551,7 +519,7 @@
 	 * Expect:
 	 * 	1. Nothing happen when you put unregistered mac address
 	 * 	2. Get the proper IDeviceObject.
-	 *  3. Check the IDeviceObject properties set.
+	 *  3. Check the IDeviceObject properties set expectedly.
 	 */
 	//@Ignore
 	@Test
@@ -561,8 +529,10 @@
 			IDevice mockDev = createMock(Device.class);
 			String macAddr = "99:99:99:99:99:99";
 			String ip = "192.168.100.1";
+			String ip2 = "192.168.100.2";
 			Integer ipInt = IPv4.toIPv4Address(ip);
-			Integer[] ipaddrs = {ipInt};
+			Integer ipInt2 = IPv4.toIPv4Address(ip2);
+			Integer[] ipaddrs = {ipInt, ipInt2};
 			String switchMacAddr = "00:00:00:00:00:00:0a:01";		
 			long switchMacAddrL = HexString.toLong(switchMacAddr);
 			short portNum = 2; 
@@ -571,14 +541,9 @@
 			
 			String dummyIP = "222.222.222.222";
 			
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
+			expect(mockDev.getMACAddressString()).andReturn(macAddr).anyTimes();
 			expect(mockDev.getIPv4Addresses()).andReturn(ipaddrs);
 			expect(mockDev.getAttachmentPoints()).andReturn(sps);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
 			replay(mockDev);
 			
 			//Mock IPortObject 1 with dpid "00:00:00:00:00:00:0a:01" and port "1"
@@ -597,7 +562,7 @@
 			//Expectation for mockIDeviceObject
 			IDeviceObject mockIDev = createMock(IDeviceObject.class);	
 			expect(mockIDev.getAttachedPorts()).andReturn(portList);
-			expect(mockIDev.getIPAddress()).andReturn(ip).times(2);
+			expect(mockIDev.getIPAddress()).andReturn(makeIPStringFromArray(ipaddrs)).times(2);
 			mockIDev.setIPAddress(makeIPStringFromArray(ipaddrs));
 			mockIDev.setMACAddress(macAddr);
 			mockIDev.setType("device");
@@ -617,8 +582,6 @@
 			expect(mockOpe.getDevices()).andReturn(deviceList).times(2);
 			replay(mockOpe);				
 			
-
-			
 			deviceImpl.init(conf);
 	
 	        IDeviceObject obj = deviceImpl.addDevice(mockDev);	
@@ -629,6 +592,9 @@
 			
 		    IDeviceObject dev = deviceImpl.getDeviceByIP(ip);
 		    assertNotNull(dev);
+		    
+			verify(mockIDev);
+			verify(mockOpe);
 			
 		} catch(Exception e) {
 			fail(e.getMessage());
@@ -642,7 +608,7 @@
 	 * 	1. Unexisting attachment point argument is set
 	 * Expect:
 	 * 	1. Nothing happen when you put unexisting attachment point.
-	 * 	2. Change the attachment point.
+	 * 	2. Set the attachment point expectedly;
 	 */
 	//@Ignore
 	@Test
@@ -660,14 +626,9 @@
 			SwitchPort sp1 = new SwitchPort(switchMacAddrL, portNum);
 			SwitchPort[] sps = {sp1};
 			
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
+			expect(mockDev.getMACAddressString()).andReturn(macAddr).anyTimes();
 			expect(mockDev.getIPv4Addresses()).andReturn(ipaddrs);
 			expect(mockDev.getAttachmentPoints()).andReturn(sps);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
 			replay(mockDev);
 			
 			//Dev2
@@ -678,14 +639,9 @@
 			SwitchPort sp2 = new SwitchPort(lSwitchMacAddr2, portNum2);
 			SwitchPort sps2[] = {sp2};
 			
-			expect(mockDev2.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev2.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev2.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev2.getMACAddressString()).andReturn(macAddr);
+			expect(mockDev2.getMACAddressString()).andReturn(macAddr).anyTimes();
 			expect(mockDev2.getIPv4Addresses()).andReturn(ipaddrs);
 			expect(mockDev2.getAttachmentPoints()).andReturn(sps2);
-			expect(mockDev2.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev2.getMACAddressString()).andReturn(macAddr);
 			replay(mockDev2);
 			
 			//Dev3
@@ -696,14 +652,9 @@
 			SwitchPort sp3 = new SwitchPort(lSwitchMacAddr3, portNum3);
 			SwitchPort sps3[] = {sp3};
 			
-			expect(mockDev3.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev3.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev3.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev3.getMACAddressString()).andReturn(macAddr);
+			expect(mockDev3.getMACAddressString()).andReturn(macAddr).anyTimes();
 			expect(mockDev3.getIPv4Addresses()).andReturn(ipaddrs);
 			expect(mockDev3.getAttachmentPoints()).andReturn(sps3);
-			expect(mockDev3.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev3.getMACAddressString()).andReturn(macAddr);
 			replay(mockDev3);
 			
 			IDeviceObject mockIDev = createMock(IDeviceObject.class);	
@@ -776,6 +727,9 @@
 		    deviceImpl.changeDeviceAttachments(mockDev2);
 			
 		    deviceImpl.changeDeviceAttachments(mockDev3);
+		    
+			verify(mockIDev);
+			verify(mockOpe);
 			
 		} catch(Exception e) {
 			fail(e.getMessage());
@@ -795,7 +749,7 @@
 	 * Condition:
 	 * 	N/A
 	 * Expect:
-	 *  1. Check correctly changed the ipadress
+	 *  1. Set the ipadress expectedly.
 	 */
 	//@Ignore
 	@Test
@@ -814,14 +768,9 @@
 			SwitchPort sp1 = new SwitchPort(switchMacAddrL, portNum);
 			SwitchPort[] sps = {sp1};
 			
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
+			expect(mockDev.getMACAddressString()).andReturn(macAddr).anyTimes();
 			expect(mockDev.getIPv4Addresses()).andReturn(ipaddrs);
 			expect(mockDev.getAttachmentPoints()).andReturn(sps);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
-			expect(mockDev.getMACAddressString()).andReturn(macAddr);
 			replay(mockDev);
 			
 			//Dev2
@@ -871,6 +820,9 @@
 			assertNotNull(obj);
 
 	        deviceImpl.changeDeviceIPv4Address(mockDev2);	
+	        
+			verify(mockIDev);
+			verify(mockOpe);
 					
 		} 
 		catch(Exception e) {
