diff --git a/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java b/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java
index f1889ce..fc1bbf3 100644
--- a/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java
+++ b/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java
@@ -376,7 +376,8 @@
                         .getTable(dbSchema, ovsTableRows.get(uuid),
                                   OvsdbTable.OPENVSWITCH);
 
-                if (((TableSchema) ovs.getTbSchema()).name().equals(dbName)) {
+                // FIXME This is a quick hack to fix the build. Functionality/logic not verified. (BOC)
+                if (ovs.dbSchema().name().equals(dbName)) {
                     return uuid;
                 }
             }
@@ -652,7 +653,7 @@
      *
      * @param childTableName child table name
      * @param childColumnName child column name
-     * @param childRowUuid child row uuid
+     * @param childUuid child row uuid
      * @param parentTableName parent table name
      * @param parentColumnName parent column
      *
@@ -720,22 +721,22 @@
     /**
      * Insert transact config.
      *
-     * @param childTable child table name
+     * @param childTableName child table name
      * @param childColumnName child column name
-     * @param childRowUuid child row uuid
      * @param parentTableName parent table name
      * @param parentColumnName parent column
+     * @param parentUuid parent uuid
      * @param row the config data
      *
      * @return uuid, empty if no uuid is find
      */
-    private String insertConfig(String childtableName, String childColumnName,
+    private String insertConfig(String childTableName, String childColumnName,
                              String parentTableName, String parentColumnName,
                              String parentUuid, Row row) {
         DatabaseSchema dbSchema = schema.get(OvsdbConstant.DATABASENAME);
-        TableSchema tableSchema = dbSchema.getTableSchema(childtableName);
+        TableSchema tableSchema = dbSchema.getTableSchema(childTableName);
 
-        String namedUuid = childtableName;
+        String namedUuid = childTableName;
         Insert insert = new Insert(tableSchema, namedUuid, row);
 
         ArrayList<Operation> operations = Lists.newArrayList();
@@ -760,7 +761,7 @@
             Mutate op = new Mutate(parentTableSchema, conditions, mutations);
             operations.add(op);
         }
-        if (childtableName.equalsIgnoreCase(OvsdbConstant.PORT)) {
+        if (childTableName.equalsIgnoreCase(OvsdbConstant.PORT)) {
             log.info("Handle port insert");
             Insert intfInsert = handlePortInsertTable(OvsdbConstant.INTERFACE,
                                                     row);
@@ -805,7 +806,8 @@
                 .getTableSchema(OvsdbConstant.PORT);
         ColumnSchema portColumnSchema = portTableSchema.getColumnSchema("name");
 
-        String portName = (String) portRow.getColumn(portColumnSchema).data();
+        // FIXME This is a quick hack to fix the build. Functionality not verified. (BOC)
+        String portName = (String) portRow.getColumn(portColumnSchema.toString()).data();
 
         Interface inf = (Interface) TableGenerator
                 .createTable(dbSchema, OvsdbTable.INTERFACE);
diff --git a/ovsdb/ctl/src/main/java/org/onosproject/ovsdb/controller/impl/OvsdbControllerImpl.java b/ovsdb/ctl/src/main/java/org/onosproject/ovsdb/controller/impl/OvsdbControllerImpl.java
index 5ffd003..a0e3de2 100644
--- a/ovsdb/ctl/src/main/java/org/onosproject/ovsdb/controller/impl/OvsdbControllerImpl.java
+++ b/ovsdb/ctl/src/main/java/org/onosproject/ovsdb/controller/impl/OvsdbControllerImpl.java
@@ -397,12 +397,12 @@
      */
     private class InternalMonitorCallBack implements Callback {
         @Override
-        public void update(UpdateNotification upadateNotification) {
-            Object key = upadateNotification.context();
+        public void update(UpdateNotification updateNotification) {
+            Object key = updateNotification.jsonValue();
             OvsdbClientService ovsdbClient = requestNotification.get(key);
 
             String dbName = requestDbName.get(key);
-            JsonNode updatesJson = upadateNotification.tbUpdatesJsonNode();
+            JsonNode updatesJson = updateNotification.tbUpdatesJsonNode();
             DatabaseSchema dbSchema = ovsdbClient.getDatabaseSchema(dbName);
             TableUpdates updates = FromJsonUtil
                     .jsonNodeToTableUpdates(updatesJson, dbSchema);
