diff --git a/VERSION b/VERSION
index e25d8d9..25b6557 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.1.5
+1.1.6-dev
diff --git a/cmd/ofagent/common.go b/cmd/ofagent/common.go
new file mode 100644
index 0000000..7372b14
--- /dev/null
+++ b/cmd/ofagent/common.go
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2020-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Package main Common Logger initialization
+package main
+
+import (
+	"github.com/opencord/voltha-lib-go/v3/pkg/log"
+)
+
+var logger log.Logger
+
+func init() {
+	// Setup this package so that it's log level can be modified at run time
+	var err error
+	logger, err = log.AddPackage(log.JSON, log.ErrorLevel, log.Fields{"pkg": "main"})
+	if err != nil {
+		panic(err)
+	}
+}
diff --git a/cmd/ofagent/main.go b/cmd/ofagent/main.go
index 2949eaa..911c0b2 100644
--- a/cmd/ofagent/main.go
+++ b/cmd/ofagent/main.go
@@ -44,13 +44,6 @@
 	fmt.Println(version.VersionInfo.String("  "))
 }
 
-func init() {
-	_, err := log.AddPackage(log.JSON, log.DebugLevel, nil)
-	if err != nil {
-		log.Errorw("unable-to-register-package-to-the-log-map", log.Fields{"error": err})
-	}
-}
-
 func setLogConfig(ctx context.Context, kvStoreHost, kvStoreType string, kvStorePort, kvStoreTimeout int) (kvstore.Client, error) {
 	client, err := kvstore.NewEtcdClient(kvStoreHost+":"+strconv.Itoa(kvStorePort), kvStoreTimeout)
 	if err != nil {
@@ -68,7 +61,7 @@
 	if kvClient != nil {
 		// Release all reservations
 		if err := kvClient.ReleaseAllReservations(ctx); err != nil {
-			log.Infow("fail-to-release-all-reservations", log.Fields{"error": err})
+			logger.Infow("fail-to-release-all-reservations", log.Fields{"error": err})
 		}
 		// Close the DB connection
 		kvClient.Close()
@@ -94,7 +87,7 @@
 
 	logLevel, err := log.StringToLogLevel(config.LogLevel)
 	if err != nil {
-		log.Fatalf("Cannot setup logging, %s", err)
+		logger.Fatalf("Cannot setup logging, %s", err)
 	}
 
 	// Setup default logger - applies for packages that do not have specific logger set
@@ -112,7 +105,7 @@
 	defer func() {
 		err := log.CleanUp()
 		if err != nil {
-			log.Errorw("unable-to-flush-any-buffered-log-entries", log.Fields{"error": err})
+			logger.Errorw("unable-to-flush-any-buffered-log-entries", log.Fields{"error": err})
 		}
 	}()
 
@@ -132,7 +125,7 @@
 
 	client, err := setLogConfig(ctx, config.KVStoreHost, config.KVStoreType, config.KVStorePort, config.KVStoreTimeout)
 	if err != nil {
-		log.Warnw("unable-to-create-kvstore-client", log.Fields{"error": err})
+		logger.Warnw("unable-to-create-kvstore-client", log.Fields{"error": err})
 	}
 
 	ofa, err := ofagent.NewOFAgent(&ofagent.OFAgent{
@@ -143,7 +136,7 @@
 		ConnectionRetryDelay:      config.ConnectionRetryDelay,
 	})
 	if err != nil {
-		log.Fatalw("failed-to-create-ofagent",
+		logger.Fatalw("failed-to-create-ofagent",
 			log.Fields{
 				"error": err})
 	}
diff --git a/internal/pkg/ofagent/changeEvent.go b/internal/pkg/ofagent/changeEvent.go
index f661ab7..dc3aa39 100644
--- a/internal/pkg/ofagent/changeEvent.go
+++ b/internal/pkg/ofagent/changeEvent.go
@@ -123,5 +123,5 @@
 		}
 	}
 
-	log.Debug("handle-change-event-finsihed")
+	logger.Debug("handle-change-event-finsihed")
 }
diff --git a/internal/pkg/ofagent/common.go b/internal/pkg/ofagent/common.go
new file mode 100644
index 0000000..66bbbcf
--- /dev/null
+++ b/internal/pkg/ofagent/common.go
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2020-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Package ofagent Common Logger initialization
+package ofagent
+
+import (
+	"github.com/opencord/voltha-lib-go/v3/pkg/log"
+)
+
+var logger log.Logger
+
+func init() {
+	// Setup this package so that it's log level can be modified at run time
+	var err error
+	logger, err = log.AddPackage(log.JSON, log.ErrorLevel, log.Fields{"pkg": "ofagent"})
+	if err != nil {
+		panic(err)
+	}
+}
diff --git a/internal/pkg/ofagent/ofagent.go b/internal/pkg/ofagent/ofagent.go
index 8bb0b94..1d225b2 100644
--- a/internal/pkg/ofagent/ofagent.go
+++ b/internal/pkg/ofagent/ofagent.go
@@ -28,8 +28,6 @@
 	"time"
 )
 
-var logger, _ = log.AddPackage(log.JSON, log.DebugLevel, nil)
-
 type ofaEvent byte
 type ofaState byte
 
@@ -203,7 +201,7 @@
 					state = ofaStateConnecting
 					go func() {
 						if err := ofa.establishConnectionToVoltha(p); err != nil {
-							log.Errorw("voltha-connection-failed", log.Fields{"error": err})
+							logger.Errorw("voltha-connection-failed", log.Fields{"error": err})
 							panic(err)
 						}
 					}()
diff --git a/internal/pkg/openflow/barrier.go b/internal/pkg/openflow/barrier.go
index f371cc8..3db9e84 100644
--- a/internal/pkg/openflow/barrier.go
+++ b/internal/pkg/openflow/barrier.go
@@ -35,6 +35,6 @@
 	reply.SetVersion(4)
 	reply.SetXid(request.GetXid())
 	if err := ofc.SendMessage(reply); err != nil {
-		log.Errorw("barrier-request-send-message", log.Fields{"error": err})
+		logger.Errorw("barrier-request-send-message", log.Fields{"error": err})
 	}
 }
diff --git a/internal/pkg/openflow/client.go b/internal/pkg/openflow/client.go
index f43bb11..94ad645 100644
--- a/internal/pkg/openflow/client.go
+++ b/internal/pkg/openflow/client.go
@@ -31,7 +31,6 @@
 	"time"
 )
 
-var logger, _ = log.AddPackage(log.JSON, log.DebugLevel, nil)
 var NoVolthaConnectionError = errors.New("no-voltha-connection")
 
 type ofcEvent byte
@@ -246,7 +245,7 @@
 					}
 					go func() {
 						if err := ofc.establishConnectionToController(); err != nil {
-							log.Errorw("controller-connection-failed", log.Fields{"error": err})
+							logger.Errorw("controller-connection-failed", log.Fields{"error": err})
 							panic(err)
 						}
 					}()
@@ -282,19 +281,19 @@
 
 	// If the child context exists, then cancel it
 	if ofDone != nil {
-		log.Debugw("closing-child-processes",
+		logger.Debugw("closing-child-processes",
 			log.Fields{"device-id": ofc.DeviceID})
 		ofDone()
 	}
 
 	// If the connection is open, then close it
 	if ofc.conn != nil {
-		log.Debugw("closing-of-connection",
+		logger.Debugw("closing-of-connection",
 			log.Fields{"device-id": ofc.DeviceID})
 		ofc.conn.Close()
 		ofc.conn = nil
 	}
-	log.Debugw("state-machine-finished",
+	logger.Debugw("state-machine-finished",
 		log.Fields{"device-id": ofc.DeviceID})
 }
 
diff --git a/internal/pkg/openflow/common.go b/internal/pkg/openflow/common.go
new file mode 100644
index 0000000..f737ad6
--- /dev/null
+++ b/internal/pkg/openflow/common.go
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2020-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Package openflow Common Logger initialization
+package openflow
+
+import (
+	"github.com/opencord/voltha-lib-go/v3/pkg/log"
+)
+
+var logger log.Logger
+
+func init() {
+	// Setup this package so that it's log level can be modified at run time
+	var err error
+	logger, err = log.AddPackage(log.JSON, log.ErrorLevel, log.Fields{"pkg": "openflow"})
+	if err != nil {
+		panic(err)
+	}
+}
diff --git a/internal/pkg/openflow/echo.go b/internal/pkg/openflow/echo.go
index 74f2dc8..af850a4 100644
--- a/internal/pkg/openflow/echo.go
+++ b/internal/pkg/openflow/echo.go
@@ -34,6 +34,6 @@
 	reply.SetXid(request.GetXid())
 	reply.SetVersion(request.GetVersion())
 	if err := ofc.SendMessage(reply); err != nil {
-		log.Errorw("handle-echo-request-send-message", log.Fields{"error": err})
+		logger.Errorw("handle-echo-request-send-message", log.Fields{"error": err})
 	}
 }
diff --git a/internal/pkg/openflow/getConfig.go b/internal/pkg/openflow/getConfig.go
index da5c473..19efdf4 100644
--- a/internal/pkg/openflow/getConfig.go
+++ b/internal/pkg/openflow/getConfig.go
@@ -42,6 +42,6 @@
 				"reply":     js})
 	}
 	if err := ofc.SendMessage(reply); err != nil {
-		log.Errorw("handle-get-config-request-send-message", log.Fields{"error": err})
+		logger.Errorw("handle-get-config-request-send-message", log.Fields{"error": err})
 	}
 }
