diff --git a/src/main/java/net/onrc/onos/graph/DBOperation.java b/src/main/java/net/onrc/onos/graph/DBOperation.java
index c0666b7..4512b48 100644
--- a/src/main/java/net/onrc/onos/graph/DBOperation.java
+++ b/src/main/java/net/onrc/onos/graph/DBOperation.java
@@ -142,10 +142,11 @@
 	 */
 	@Override
 	public IPortObject searchPort(String dpid, Short number) {
-	    //System.out.println("searchPort");
+	    FramedGraph fg = conn.getFramedGraph();
+	    if ( fg == null ) return null;
 	    String id = dpid + number.toString();
-	    return (conn.getFramedGraph() != null && conn.getFramedGraph().getVertices("port_id", id).iterator().hasNext())
-		    ? (IPortObject) conn.getFramedGraph().getVertices("port_id", id, IPortObject.class).iterator().next() : null;
+	    Iterator<IPortObject> it = conn.getFramedGraph().getVertices("port_id", id, IPortObject.class).iterator();
+	    return (it.hasNext()) ? it.next() : null;
 
 	}
 
@@ -230,9 +231,10 @@
 	*/
 	@Override
 	public ISwitchObject searchSwitch(final String dpid) {
-	    //System.out.println("searchSwitch");
-	    return (conn.getFramedGraph() != null && conn.getFramedGraph().getVertices("dpid", dpid).iterator().hasNext())
-		    ? (ISwitchObject) (conn.getFramedGraph().getVertices("dpid", dpid, ISwitchObject.class).iterator().next()) : null;
+	    FramedGraph fg = conn.getFramedGraph();
+	    if ( fg == null ) return null;
+	    Iterator<ISwitchObject> it = conn.getFramedGraph().getVertices("dpid", dpid, ISwitchObject.class).iterator();
+	    return (it.hasNext()) ? it.next() : null;
 	}
 
 	/**
@@ -257,9 +259,10 @@
 	 */
 	@Override
 	public IDeviceObject searchDevice(String macAddr) {
-	    return (conn.getFramedGraph() != null && conn.getFramedGraph().getVertices("dl_addr", macAddr).iterator().hasNext())
-		    ? (IDeviceObject) conn.getFramedGraph().getVertices("dl_addr", macAddr, IDeviceObject.class).iterator().next() : null;
-
+	    FramedGraph fg = conn.getFramedGraph();
+	    if ( fg == null ) return null;
+	    Iterator<IDeviceObject> it = conn.getFramedGraph().getVertices("dl_addr", macAddr, IDeviceObject.class).iterator();
+	    return (it.hasNext()) ? it.next() : null;
 	}
 
 	/**
@@ -268,10 +271,10 @@
 	 */
 	@Override
 	public IFlowPath searchFlowPath(final FlowId flowId) {
-	    //System.out.println("searchFlowPath");
-	    return conn.getFramedGraph().getVertices("flow_id", flowId.toString()).iterator().hasNext()
-		    ? (IFlowPath) conn.getFramedGraph().getVertices("flow_id", flowId.toString(),
-		    IFlowPath.class).iterator().next() : null;
+	    FramedGraph fg = conn.getFramedGraph();
+	    if ( fg == null ) return null;
+	    Iterator<IFlowPath> it = conn.getFramedGraph().getVertices("flow_id", flowId.toString(), IFlowPath.class).iterator();
+	    return (it.hasNext()) ? it.next() : null;
 	}
 
 	/**
@@ -308,10 +311,10 @@
 	 */
 	@Override
 	public IFlowEntry searchFlowEntry(FlowEntryId flowEntryId) {
-	    //System.out.println("searchFlowEntry");
-	    return conn.getFramedGraph().getVertices("flow_entry_id", flowEntryId.toString()).iterator().hasNext()
-		    ? (IFlowEntry)conn.getFramedGraph().getVertices("flow_entry_id", flowEntryId.toString(),
-		    IFlowEntry.class).iterator().next() : null;
+	    FramedGraph fg = conn.getFramedGraph();
+	    if ( fg == null ) return null;
+	    Iterator<IFlowEntry> it = conn.getFramedGraph().getVertices("flow_entry_id", flowEntryId.toString(), IFlowEntry.class).iterator();
+	    return (it.hasNext()) ? it.next() : null;
 	}
 
 	/**
