diff --git a/adaptercore/openolt.go b/adaptercore/openolt.go
index 9a6afc3..358d9f7 100644
--- a/adaptercore/openolt.go
+++ b/adaptercore/openolt.go
@@ -24,9 +24,9 @@
 	com "github.com/opencord/voltha-go/adapters/common"
 	"github.com/opencord/voltha-go/common/log"
 	"github.com/opencord/voltha-go/kafka"
-	ic "github.com/opencord/voltha-go/protos/inter_container"
-	"github.com/opencord/voltha-go/protos/openflow_13"
-	"github.com/opencord/voltha-go/protos/voltha"
+	ic "github.com/opencord/voltha-protos/go/inter_container"
+	"github.com/opencord/voltha-protos/go/openflow_13"
+	"github.com/opencord/voltha-protos/go/voltha"
 )
 
 type OpenOLT struct {
@@ -35,11 +35,14 @@
 	adapterProxy          *com.AdapterProxy
 	kafkaICProxy          *kafka.InterContainerProxy
 	numOnus               int
+	KVStoreHost           string
+        KVStorePort           int
+	KVStoreType           string
 	exitChannel           chan int
 	lockDeviceHandlersMap sync.RWMutex
 }
 
-func NewOpenOLT(ctx context.Context, kafkaICProxy *kafka.InterContainerProxy, coreProxy *com.CoreProxy, adapterProxy *com.AdapterProxy, onuNumber int) *OpenOLT {
+func NewOpenOLT(ctx context.Context, kafkaICProxy *kafka.InterContainerProxy, coreProxy *com.CoreProxy, adapterProxy *com.AdapterProxy, onuNumber int, kvStoreHost string, kvStorePort int, KVStoreType string) *OpenOLT {
 	var openOLT OpenOLT
 	openOLT.exitChannel = make(chan int, 1)
 	openOLT.deviceHandlers = make(map[string]*DeviceHandler)
@@ -47,6 +50,9 @@
 	openOLT.numOnus = onuNumber
 	openOLT.coreProxy = coreProxy
 	openOLT.adapterProxy = adapterProxy
+	openOLT.KVStoreHost = kvStoreHost
+	openOLT.KVStorePort = kvStorePort
+	openOLT.KVStoreType = KVStoreType
 	openOLT.lockDeviceHandlersMap = sync.RWMutex{}
 	return &openOLT
 }
@@ -77,16 +83,16 @@
 }
 
 func (oo *OpenOLT) addDeviceHandlerToMap(agent *DeviceHandler) {
-	oo.lockDeviceHandlersMap.Lock()
-	defer oo.lockDeviceHandlersMap.Unlock()
+    oo.lockDeviceHandlersMap.Lock()
+    defer oo.lockDeviceHandlersMap.Unlock()
 	if _, exist := oo.deviceHandlers[agent.deviceId]; !exist {
 		oo.deviceHandlers[agent.deviceId] = agent
-	}
+    }
 }
 
 func (oo *OpenOLT) deleteDeviceHandlerToMap(agent *DeviceHandler) {
-	oo.lockDeviceHandlersMap.Lock()
-	defer oo.lockDeviceHandlersMap.Unlock()
+    oo.lockDeviceHandlersMap.Lock()
+    defer oo.lockDeviceHandlersMap.Unlock()
 	delete(oo.deviceHandlers, agent.deviceId)
 }
 
@@ -111,20 +117,20 @@
 }
 
 func (oo *OpenOLT) Adopt_device(device *voltha.Device) error {
-	if device == nil {
-		log.Warn("device-is-nil")
-		return errors.New("nil-device")
-	}
-	log.Infow("adopt-device", log.Fields{"deviceId": device.Id})
-	var handler *DeviceHandler
-	if handler = oo.getDeviceHandler(device.Id); handler == nil {
+    if device == nil {
+        log.Warn("device-is-nil")
+        return errors.New("nil-device")
+    }
+    log.Infow("adopt-device", log.Fields{"deviceId": device.Id})
+    var handler *DeviceHandler
+    if handler = oo.getDeviceHandler(device.Id); handler == nil {
 		handler := NewDeviceHandler(oo.coreProxy, oo.adapterProxy, device, oo)
-		oo.addDeviceHandlerToMap(handler)
-		go handler.AdoptDevice(device)
-		// Launch the creation of the device topic
+        oo.addDeviceHandlerToMap(handler)
+        go handler.AdoptDevice(device)
+        // Launch the creation of the device topic
 		// go oo.createDeviceTopic(device)
-	}
-	return nil
+    }
+    return nil
 }
 
 func (oo *OpenOLT) Get_ofp_device_info(device *voltha.Device) (*ic.SwitchCapability, error) {
@@ -207,7 +213,12 @@
 }
 
 func (oo *OpenOLT) Update_flows_incrementally(device *voltha.Device, flows *openflow_13.FlowChanges, groups *openflow_13.FlowGroupChanges) error {
-    return errors.New("UnImplemented")
+    log.Debugw("Update_flows_incrementally", log.Fields{"deviceId": device.Id,"flows":flows})
+    if handler := oo.getDeviceHandler(device.Id); handler != nil {
+        return handler.UpdateFlowsIncrementally(device, flows, groups)
+    }
+    log.Errorw("Update_flows_incrementally failed-device-handler-not-set", log.Fields{"deviceId": device.Id})
+    return errors.New("device-handler-not-set")
 }
 
 func (oo *OpenOLT) Update_pm_config(device *voltha.Device, pm_configs *voltha.PmConfigs) error {
