diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/FromJsonUtil.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/FromJsonUtil.java
index 36cc16f..3383ba9 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/FromJsonUtil.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/utils/FromJsonUtil.java
@@ -221,15 +221,21 @@
         List<OperationResult> operationResults = new ArrayList<OperationResult>();
         for (int i = 0; i < input.size(); i++) {
             JsonNode jsonNode = input.get(i);
-            Operation operation = operations.get(i);
+
             if (jsonNode != null && jsonNode.size() > 0) {
-                if (i >= operations.size() || !operation.getOp().equals("select")) {
+                if (i >= operations.size()) {
                     OperationResult or = objectMapper.convertValue(jsonNode, OperationResult.class);
                     operationResults.add(or);
                 } else {
-                    List<Row> rows = createRows(operation.getTableSchema(), jsonNode);
-                    OperationResult or = new OperationResult(rows);
-                    operationResults.add(or);
+                    Operation operation = operations.get(i);
+                    if (!operation.getOp().equals("select")) {
+                        OperationResult or = objectMapper.convertValue(jsonNode, OperationResult.class);
+                        operationResults.add(or);
+                    } else {
+                        List<Row> rows = createRows(operation.getTableSchema(), jsonNode);
+                        OperationResult or = new OperationResult(rows);
+                        operationResults.add(or);
+                    }
                 }
             }
         }
