diff --git a/grpc/changeEvent.go b/grpc/changeEvent.go
index c6f6376..68f87cd 100644
--- a/grpc/changeEvent.go
+++ b/grpc/changeEvent.go
@@ -19,35 +19,44 @@
 import (
 	"context"
 	"encoding/json"
+
 	ofp "github.com/donNewtonAlpha/goloxi/of13"
 	"github.com/golang/protobuf/ptypes/empty"
 	"github.com/opencord/ofagent-go/openflow"
+	"github.com/opencord/ofagent-go/settings"
+	l "github.com/opencord/voltha-lib-go/v2/pkg/log"
 	pb "github.com/opencord/voltha-protos/v2/go/voltha"
 	"google.golang.org/grpc"
-	"log"
+
 	"net"
 	"time"
 )
 
 func receiveChangeEvent(client pb.VolthaServiceClient) {
+	if settings.GetDebug(grpcDeviceID) {
+		logger.Debugln("GrpcClient receiveChangeEvent called")
+	}
 	opt := grpc.EmptyCallOption{}
 	stream, err := client.ReceiveChangeEvents(context.Background(), &empty.Empty{}, opt)
 	if err != nil {
-		log.Fatalln("Unable to establish Receive Change Event Stream")
+		logger.Fatalln("Unable to establish Receive Change Event Stream")
 	}
 	for {
 		changeEvent, err := stream.Recv()
 		if err != nil {
-			log.Printf("Error receiving change event %v", err)
+			logger.Errorw("Error receiving change event", l.Fields{"Error": err})
 		}
-		js, _ := json.Marshal(changeEvent)
-
-		log.Printf("Received Change Event   \n\n\n %s \n\n\n", js)
-		deviceId := changeEvent.GetId()
+		deviceID := changeEvent.GetId()
 		portStatus := changeEvent.GetPortStatus()
+		if settings.GetDebug(grpcDeviceID) {
+			//js, _ := json.Marshal(changeEvent)
+
+			logger.Debugw("Received Change Event", l.Fields{"DeviceID": deviceID, "PortStatus": portStatus})
+		}
+
 		if portStatus == nil {
-			jsonMessage, _ := json.Marshal(changeEvent.GetEvent())
-			log.Printf("Received change event that was not port status %v", jsonMessage)
+			js, _ := json.Marshal(changeEvent.GetEvent())
+			logger.Warnw("Received change event that was not port status", l.Fields{"ChangeEvent": js})
 			break
 		}
 		ofPortStatus := ofp.NewPortStatus()
@@ -77,9 +86,9 @@
 		ofDesc.SetState(ofp.PortState(desc.GetState()))
 		ofDesc.SetSupported(ofp.PortFeatures(desc.GetSupported()))
 		ofPortStatus.SetDesc(*ofDesc)
-		var client = clientMap[deviceId]
+		var client = clientMap[deviceID]
 		if client == nil {
-			client = addClient(deviceId)
+			client = addClient(deviceID)
 			time.Sleep(2 * time.Second)
 		}
 		client.SendMessage(ofPortStatus)
diff --git a/grpc/client.go b/grpc/client.go
index 4116461..40c805b 100644
--- a/grpc/client.go
+++ b/grpc/client.go
@@ -26,19 +26,29 @@
 	"github.com/opencord/ofagent-go/openflow"
 
 	"fmt"
-	"log"
+
+	"github.com/opencord/ofagent-go/settings"
+	l "github.com/opencord/voltha-lib-go/v2/pkg/log"
 
 	pb "github.com/opencord/voltha-protos/v2/go/voltha"
 	"google.golang.org/grpc"
 )
 
+var grpcDeviceID = "GRPC_CLIENT"
 var client pb.VolthaServiceClient
 var clientMap map[string]*openflow.Client
 var ofAddress string
 var ofPort uint16
 var mapLock sync.Mutex
+var logger, _ = l.AddPackage(l.JSON, l.DebugLevel, nil)
 
+//StartClient - make the inital connection to voltha and kicks off io streams
 func StartClient(endpointAddress string, endpointPort uint16, openFlowAddress string, openFlowPort uint16) {
+
+	if settings.GetDebug(grpcDeviceID) {
+		logger.Debugw("Starting GRPC - VOLTHA client", l.Fields{"EndPointAddr": endpointAddress,
+			"EndPointPort": endpointPort, "OpenFlowAddress": openFlowAddress, "OpenFlowPort": openFlowPort})
+	}
 	ofAddress = openFlowAddress
 	ofPort = openFlowPort
 	clientMap = make(map[string]*openflow.Client)
@@ -48,7 +58,7 @@
 	conn, err := grpc.Dial(endpoint, opts...)
 	defer conn.Close()
 	if err != nil {
-		log.Fatalf("fail to dial: %v", err)
+		l.Fatalw("StartClient failed opening GRPC connecton", l.Fields{"EndPoint": endpoint, "Error": err})
 	}
 	client = pb.NewVolthaServiceClient(conn)
 
@@ -58,15 +68,16 @@
 
 	openflow.SetGrpcClient(&client)
 	for {
-		log.Println("entering device refresh pull")
+		if settings.GetDebug(grpcDeviceID) {
+			logger.Debugln("GrpcClient entering device refresh pull")
+		}
 		deviceList, err := client.ListLogicalDevices(context.Background(), &empty.Empty{})
 		if err != nil {
-			log.Printf("ERROR GET DEVICE LIST %v", err)
+			logger.Errorw("GrpcClient getDeviceList failed", l.Fields{"Error": err})
 		}
 		devices := deviceList.GetItems()
 		refreshDeviceList(devices)
 		time.Sleep(time.Minute)
-		log.Println("waking up")
 	}
 }
 func refreshDeviceList(devices []*pb.LogicalDevice) {
@@ -74,20 +85,22 @@
 
 	var toAdd []string
 	var toDel []string
-	var deviceIdMap = make(map[string]string)
+	var deviceIDMap = make(map[string]string)
 	for i := 0; i < len(devices); i++ {
-		log.Printf("Device ID %s", devices[i].GetId())
-		deviceId := devices[i].GetId()
-		deviceIdMap[deviceId] = deviceId
-		if clientMap[deviceId] == nil {
-			toAdd = append(toAdd, deviceId)
+		deviceID := devices[i].GetId()
+		deviceIDMap[deviceID] = deviceID
+		if clientMap[deviceID] == nil {
+			toAdd = append(toAdd, deviceID)
 		}
 	}
-	for key, _ := range clientMap {
-		if deviceIdMap[key] == "" {
+	for key := range clientMap {
+		if deviceIDMap[key] == "" {
 			toDel = append(toDel, key)
 		}
 	}
+	if settings.GetDebug(grpcDeviceID) {
+		logger.Debugw("GrpcClient refreshDeviceList", l.Fields{"ToAdd": toAdd, "ToDel": toDel})
+	}
 	for i := 0; i < len(toAdd); i++ {
 		var client = addClient(toAdd[i])
 		go client.Start()
@@ -99,17 +112,28 @@
 		mapLock.Unlock()
 	}
 }
-func addClient(deviceId string) *openflow.Client {
+func addClient(deviceID string) *openflow.Client {
+	if settings.GetDebug(grpcDeviceID) {
+		logger.Debugw("GrpcClient addClient called ", l.Fields{"DeviceID": deviceID})
+	}
 	mapLock.Lock()
 	var client *openflow.Client
-	client = clientMap[deviceId]
+	client = clientMap[deviceID]
 	if client == nil {
-		client = openflow.NewClient(ofAddress, ofPort, deviceId, true)
-		clientMap[deviceId] = client
+		client = openflow.NewClient(ofAddress, ofPort, deviceID, true)
+		go client.Start()
+		clientMap[deviceID] = client
 	}
 	mapLock.Unlock()
+	logger.Debugw("Finished with addClient", l.Fields{"deviceID": deviceID})
 	return client
 }
-func GetClient(deviceId string) *openflow.Client {
-	return clientMap[deviceId]
+
+//GetClient Returns a pointer to the OpenFlow client
+func GetClient(deviceID string) *openflow.Client {
+	client := clientMap[deviceID]
+	if client == nil {
+		client = addClient(deviceID)
+	}
+	return client
 }
diff --git a/grpc/packetIn.go b/grpc/packetIn.go
index 44e537b..bc8d3a8 100644
--- a/grpc/packetIn.go
+++ b/grpc/packetIn.go
@@ -19,31 +19,38 @@
 import (
 	"context"
 	"encoding/json"
+
 	"github.com/donNewtonAlpha/goloxi"
 	ofp "github.com/donNewtonAlpha/goloxi/of13"
 	"github.com/golang/protobuf/ptypes/empty"
 	"github.com/opencord/ofagent-go/openflow"
+	"github.com/opencord/ofagent-go/settings"
+	l "github.com/opencord/voltha-lib-go/v2/pkg/log"
 	"github.com/opencord/voltha-protos/v2/go/openflow_13"
 	pb "github.com/opencord/voltha-protos/v2/go/voltha"
 	"google.golang.org/grpc"
-	"log"
 )
 
 func receivePacketIn(client pb.VolthaServiceClient) {
+	if settings.GetDebug(grpcDeviceID) {
+		logger.Debugln("Starting ReceivePacketIn Stream")
+	}
 	opt := grpc.EmptyCallOption{}
 	stream, err := client.ReceivePacketsIn(context.Background(), &empty.Empty{}, opt)
 	if err != nil {
-		log.Fatalln("Unable to establish stream")
+		logger.Fatalw("Unable to establish PacketIn stream", l.Fields{"Error": err})
 	}
 	for {
 		packet, err := stream.Recv()
 		packetIn := packet.GetPacketIn()
 
 		if err != nil {
-			log.Fatalf("error on stream.Rec %v", err)
+			logger.Fatalw("ReceivePacketIn unable to receive packet", l.Fields{"Error": err})
 		}
-		js, _ := json.Marshal(packetIn)
-		log.Printf("PACKET IN %s", js)
+		if settings.GetDebug(grpcDeviceID) {
+			js, _ := json.Marshal(packetIn)
+			logger.Debugw("ReceivePacketIn Recieved", l.Fields{"PacketIn": js})
+		}
 		deviceID := packet.GetId()
 		ofPacketIn := ofp.NewPacketIn()
 		ofPacketIn.SetVersion(uint8(4))
@@ -113,7 +120,7 @@
 
 				fields = append(fields, ofpVlanVid)
 			default:
-				log.Printf("handleFlowStatsRequest   Unhandled OxmField %v", ofbField.Type)
+				logger.Warnw("receivePacketIn   Unhandled OxmField ", l.Fields{"Field": ofbField.Type})
 			}
 		}
 		match.SetLength(size)
diff --git a/grpc/packetOut.go b/grpc/packetOut.go
index f1891e1..c2c92d1 100644
--- a/grpc/packetOut.go
+++ b/grpc/packetOut.go
@@ -17,27 +17,33 @@
 package grpc
 
 import (
+	"context"
 	"encoding/json"
+
 	"github.com/opencord/ofagent-go/openflow"
+	"github.com/opencord/ofagent-go/settings"
+	l "github.com/opencord/voltha-lib-go/v2/pkg/log"
 	pb "github.com/opencord/voltha-protos/v2/go/voltha"
 	"google.golang.org/grpc"
-	"log"
 )
-import "context"
 
 func streamPacketOut(client pb.VolthaServiceClient) {
+	if settings.GetDebug(grpcDeviceID) {
+		logger.Debugln("GrpcClient streamPacketOut called")
+	}
 	opt := grpc.EmptyCallOption{}
 	outClient, err := client.StreamPacketsOut(context.Background(), opt)
 	if err != nil {
-
-		log.Printf("Error creating packetout stream %v", err)
+		logger.Fatalw("streamPacketOut Error creating packetout stream ", l.Fields{"Error": err})
 	}
 	packetOutChannel := make(chan pb.PacketOut)
 	openflow.SetPacketOutChannel(packetOutChannel)
 	for {
 		ofPacketOut := <-packetOutChannel
-		js, _ := json.Marshal(ofPacketOut)
-		log.Printf("RECEIVED PACKET OUT FROM CHANNEL %s", js)
+		if settings.GetDebug(grpcDeviceID) {
+			js, _ := json.Marshal(ofPacketOut)
+			logger.Debugw("streamPacketOut Receive PacketOut from Channel", l.Fields{"PacketOut": js})
+		}
 		outClient.Send(&ofPacketOut)
 	}
 
