diff --git a/cmd/ofagent/common.go b/cmd/ofagent/common.go
index 7372b14..37c04cf 100644
--- a/cmd/ofagent/common.go
+++ b/cmd/ofagent/common.go
@@ -21,12 +21,12 @@
 	"github.com/opencord/voltha-lib-go/v3/pkg/log"
 )
 
-var logger log.Logger
+var logger log.CLogger
 
 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"})
+	logger, err = log.RegisterPackage(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 14b38ed..911d99e 100644
--- a/cmd/ofagent/main.go
+++ b/cmd/ofagent/main.go
@@ -45,13 +45,13 @@
 }
 
 func setLogConfig(ctx context.Context, kvStoreAddress, kvStoreType string, kvStoreTimeout time.Duration) (kvstore.Client, error) {
-	client, err := kvstore.NewEtcdClient(kvStoreAddress, kvStoreTimeout, log.WarnLevel)
+	client, err := kvstore.NewEtcdClient(ctx, kvStoreAddress, kvStoreTimeout, log.WarnLevel)
 
 	if err != nil {
 		return nil, err
 	}
 
-	cm := conf.NewConfigManager(client, kvStoreType, kvStoreAddress, kvStoreTimeout)
+	cm := conf.NewConfigManager(ctx, client, kvStoreType, kvStoreAddress, kvStoreTimeout)
 	go conf.StartLogLevelConfigProcessing(cm, ctx)
 	return client, nil
 }
@@ -62,10 +62,10 @@
 	if kvClient != nil {
 		// Release all reservations
 		if err := kvClient.ReleaseAllReservations(ctx); err != nil {
-			logger.Infow("fail-to-release-all-reservations", log.Fields{"error": err})
+			logger.Infow(ctx, "fail-to-release-all-reservations", log.Fields{"error": err})
 		}
 		// Close the DB connection
-		kvClient.Close()
+		kvClient.Close(ctx)
 	}
 
 }
@@ -84,11 +84,18 @@
 		printBanner()
 	}
 
+	/*
+	 * Create a context which to start the services used by the applicaiton
+	 * and attach the probe to that context
+	 */
+	p := &probe.Probe{}
+	ctx := context.WithValue(context.Background(), probe.ProbeContextKey, p)
+
 	// Setup logging
 
 	logLevel, err := log.StringToLogLevel(config.LogLevel)
 	if err != nil {
-		logger.Fatalf("Cannot setup logging, %s", err)
+		logger.Fatalf(ctx, "Cannot setup logging, %s", err)
 	}
 
 	// Setup default logger - applies for packages that do not have specific logger set
@@ -109,7 +116,7 @@
 	defer func() {
 		err := log.CleanUp()
 		if err != nil {
-			logger.Errorw("unable-to-flush-any-buffered-log-entries", log.Fields{"error": err})
+			logger.Errorw(ctx, "unable-to-flush-any-buffered-log-entries", log.Fields{"error": err})
 		}
 	}()
 
@@ -118,21 +125,14 @@
 	 * is done in the main function so just in case the main starts multiple other
 	 * objects there can be a single probe end point for the process.
 	 */
-	p := &probe.Probe{}
-	go p.ListenAndServe(config.ProbeEndPoint)
-
-	/*
-	 * Create a context which to start the services used by the applicaiton
-	 * and attach the probe to that context
-	 */
-	ctx := context.WithValue(context.Background(), probe.ProbeContextKey, p)
+	go p.ListenAndServe(ctx, config.ProbeEndPoint)
 
 	client, err := setLogConfig(ctx, config.KVStoreAddress, config.KVStoreType, config.KVStoreTimeout)
 	if err != nil {
-		logger.Warnw("unable-to-create-kvstore-client", log.Fields{"error": err})
+		logger.Warnw(ctx, "unable-to-create-kvstore-client", log.Fields{"error": err})
 	}
 
-	ofa, err := ofagent.NewOFAgent(&ofagent.OFAgent{
+	ofa, err := ofagent.NewOFAgent(ctx, &ofagent.OFAgent{
 		OFControllerEndPoints:     config.OFControllerEndPoints,
 		VolthaApiEndPoint:         config.VolthaApiEndPoint,
 		DeviceListRefreshInterval: config.DeviceListRefreshInterval,
@@ -140,7 +140,7 @@
 		ConnectionRetryDelay:      config.ConnectionRetryDelay,
 	})
 	if err != nil {
-		logger.Fatalw("failed-to-create-ofagent",
+		logger.Fatalw(ctx, "failed-to-create-ofagent",
 			log.Fields{
 				"error": err})
 	}
diff --git a/cmd/ofagent/profile.go b/cmd/ofagent/profile.go
index f539afd..73d05f8 100644
--- a/cmd/ofagent/profile.go
+++ b/cmd/ofagent/profile.go
@@ -19,13 +19,15 @@
 package main
 
 import (
+	"context"
 	"net/http"
 	_ "net/http/pprof"
 )
 
 func realMain() {
 	go func() {
-		logger.Fatal(http.ListenAndServe("0.0.0.0:6060", nil))
+		ctx := context.Background()
+		logger.Fatal(ctx, http.ListenAndServe("0.0.0.0:6060", nil))
 	}()
 
 }
diff --git a/cmd/ofagent/release.go b/cmd/ofagent/release.go
index 67f8187..1fbfc2b 100644
--- a/cmd/ofagent/release.go
+++ b/cmd/ofagent/release.go
@@ -18,6 +18,9 @@
 
 package main
 
+import "context"
+
 func realMain() {
-	logger.Infoln("NOT PROFILING")
+	ctx := context.Background()
+	logger.Infoln(ctx, "NOT PROFILING")
 }
