diff --git a/common/logger/logger.go b/common/logger/logger.go
index cb7229f..6efe0f1 100644
--- a/common/logger/logger.go
+++ b/common/logger/logger.go
@@ -17,9 +17,10 @@
 package logger
 
 import (
+	"time"
+
 	lkh "github.com/gfremex/logrus-kafka-hook"
 	log "github.com/sirupsen/logrus"
-	"time"
 )
 
 var (
@@ -34,17 +35,17 @@
 	myLogger = logger.WithField("topics", []string{"bbsim.log"})
 
 	var logLevel = log.DebugLevel
-	switch level{
-		case "TRACE":
-			logLevel = log.TraceLevel
-		case "INFO":
-			logLevel = log.InfoLevel
-		case "WARN":
-			logLevel = log.WarnLevel
-		case "ERROR":
-			logLevel = log.ErrorLevel
-		default:
-			logLevel = log.DebugLevel
+	switch level {
+	case "TRACE":
+		logLevel = log.TraceLevel
+	case "INFO":
+		logLevel = log.InfoLevel
+	case "WARN":
+		logLevel = log.WarnLevel
+	case "ERROR":
+		logLevel = log.ErrorLevel
+	default:
+		logLevel = log.DebugLevel
 	}
 	logger.Println("Setting Log Level ", logLevel)
 	logger.SetLevel(logLevel)
diff --git a/core/api_service.go b/core/api_service.go
index a826594..1800e9e 100644
--- a/core/api_service.go
+++ b/core/api_service.go
@@ -22,15 +22,13 @@
 	"net/http"
 	"sync"
 
-	"gerrit.opencord.org/voltha-bbsim/device"
-
 	pb "gerrit.opencord.org/voltha-bbsim/api"
+	"gerrit.opencord.org/voltha-bbsim/common/logger"
+	"gerrit.opencord.org/voltha-bbsim/device"
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/codes"
 	"google.golang.org/grpc/status"
-
-	"gerrit.opencord.org/voltha-bbsim/common/logger"
 )
 
 // Response Constants
diff --git a/core/core_server.go b/core/core_server.go
index 4c4fcab..69c0bc8 100644
--- a/core/core_server.go
+++ b/core/core_server.go
@@ -26,7 +26,6 @@
 
 	pb "gerrit.opencord.org/voltha-bbsim/api"
 	"gerrit.opencord.org/voltha-bbsim/common/logger"
-	"gerrit.opencord.org/voltha-bbsim/common/utils"
 	"gerrit.opencord.org/voltha-bbsim/device"
 	flowHandler "gerrit.opencord.org/voltha-bbsim/flow"
 	openolt "gerrit.opencord.org/voltha-bbsim/protos"
@@ -169,7 +168,7 @@
 	for i := 0; i < MaxOnusPerPon; i++ {
 		oltid := s.Olt.ID
 		intfid := uint32(1)
-		sn := utils.ConvB2S(device.NewSN(oltid, intfid, uint32(i)))
+		sn := device.ConvB2S(device.NewSN(oltid, intfid, uint32(i)))
 		s.CtagMap[sn] = uint32(900 + i) // This is hard coded for BBWF
 	}
 
@@ -573,18 +572,18 @@
 				logger.Error("Failed to GetOnuByID:%d", onuid)
 				continue
 			}
-			sn := utils.ConvB2S(onu.SerialNumber.VendorSpecific)
+			sn := device.ConvB2S(onu.SerialNumber.VendorSpecific)
 			if ctag, ok := s.CtagMap[sn]; ok == true {
 				tagpkt, err := PushVLAN(pkt, uint16(ctag), onu)
 				if err != nil {
-					utils.LoggerWithOnu(onu).WithFields(log.Fields{
+					device.LoggerWithOnu(onu).WithFields(log.Fields{
 						"gemId": gemid,
 					}).Error("Fail to tag C-tag")
 				} else {
 					pkt = tagpkt
 				}
 			} else {
-				utils.LoggerWithOnu(onu).WithFields(log.Fields{
+				device.LoggerWithOnu(onu).WithFields(log.Fields{
 					"gemId":   gemid,
 					"cTagMap": s.CtagMap,
 				}).Error("Could not find onuid in CtagMap", onuid, sn, s.CtagMap)
@@ -609,7 +608,7 @@
 			intfid := nnipkt.Info.intfid
 			onu, _ := s.GetOnuByID(onuid, intfid)
 
-			utils.LoggerWithOnu(onu).Info("Received packet from NNI in grpc Server.")
+			device.LoggerWithOnu(onu).Info("Received packet from NNI in grpc Server.")
 
 			pkt := nnipkt.Pkt
 			data = &openolt.Indication_PktInd{PktInd: &openolt.PacketIndication{IntfType: "nni", IntfId: intfid, Pkt: pkt.Data()}}
@@ -637,12 +636,12 @@
 		pkt, _ := layerEth.(*layers.Ethernet)
 		ethtype := pkt.EthernetType
 		if ethtype == layers.EthernetTypeEAPOL {
-			utils.LoggerWithOnu(onu).Info("Received downstream packet is EAPOL.")
+			device.LoggerWithOnu(onu).Info("Received downstream packet is EAPOL.")
 			eapolPkt := byteMsg{IntfId: intfid, OnuId: onuid, Byte: rawpkt.Data()}
 			s.eapolOut <- &eapolPkt
 			return nil
 		} else if layerDHCP := rawpkt.Layer(layers.LayerTypeDHCPv4); layerDHCP != nil {
-			utils.LoggerWithOnu(onu).WithFields(log.Fields{
+			device.LoggerWithOnu(onu).WithFields(log.Fields{
 				"payload": layerDHCP.LayerPayload(),
 				"type":    layerDHCP.LayerType().String(),
 			}).Info("Received downstream packet is DHCP.")
@@ -653,7 +652,7 @@
 			s.dhcpOut <- &dhcpPkt
 			return nil
 		} else {
-			utils.LoggerWithOnu(onu).Info("WARNING: Received packet is not EAPOL or DHCP")
+			device.LoggerWithOnu(onu).Warn("WARNING: Received packet is not EAPOL or DHCP")
 			return nil
 		}
 		ioinfo, err := s.identifyUniIoinfo("inside", intfid, onuid)
@@ -664,7 +663,7 @@
 		SendUni(handle, rawpkt, onu)
 		return nil
 	}
-	utils.LoggerWithOnu(onu).Info("WARNING: Received packet does not have layerEth")
+	device.LoggerWithOnu(onu).Info("WARNING: Received packet does not have layerEth")
 	return nil
 }
 
@@ -771,7 +770,7 @@
 }
 
 func stringifySerialNumber(serialNum *openolt.SerialNumber) string {
-	return string(serialNum.VendorId) + utils.ConvB2S(serialNum.VendorSpecific)
+	return string(serialNum.VendorId) + device.ConvB2S(serialNum.VendorSpecific)
 }
 
 func getOpenoltSerialNumber(SerialNumber string) (*openolt.SerialNumber, error) {
diff --git a/core/grpc_service.go b/core/grpc_service.go
index 2d216d8..edf7d1b 100644
--- a/core/grpc_service.go
+++ b/core/grpc_service.go
@@ -20,7 +20,6 @@
 	"net"
 
 	"gerrit.opencord.org/voltha-bbsim/common/logger"
-	"gerrit.opencord.org/voltha-bbsim/common/utils"
 	"gerrit.opencord.org/voltha-bbsim/device"
 	flowHandler "gerrit.opencord.org/voltha-bbsim/flow"
 	openolt "gerrit.opencord.org/voltha-bbsim/protos"
@@ -187,12 +186,12 @@
 		logger.Error("Failed in OnuPacketOut, %v", err)
 		return new(openolt.Empty), err
 	}
-	utils.LoggerWithOnu(onu).Debugf("OLT %d receives OnuPacketOut () to IF-ID:%d ONU-ID %d.", s.Olt.ID, packet.IntfId, packet.OnuId)
+	device.LoggerWithOnu(onu).Debugf("OLT %d receives OnuPacketOut () to IF-ID:%d ONU-ID %d.", s.Olt.ID, packet.IntfId, packet.OnuId)
 	onuid := packet.OnuId
 	intfid := packet.IntfId
 	rawpkt := gopacket.NewPacket(packet.Pkt, layers.LayerTypeEthernet, gopacket.Default)
 	if err := s.onuPacketOut(intfid, onuid, rawpkt); err != nil {
-		utils.LoggerWithOnu(onu).WithField("error", err).Errorf("OnuPacketOut Error ")
+		device.LoggerWithOnu(onu).WithField("error", err).Errorf("OnuPacketOut Error ")
 		return new(openolt.Empty), err
 	}
 	return new(openolt.Empty), nil
@@ -234,7 +233,7 @@
 	if err == nil {
 		onu.GemportID = uint16(flow.GemportId)
 
-		utils.LoggerWithOnu(onu).WithFields(log.Fields{
+		device.LoggerWithOnu(onu).WithFields(log.Fields{
 			"olt":   s.Olt.ID,
 			"c_tag": flow.Action.IVid,
 		}).Debug("OLT receives FlowAdd().")
@@ -293,7 +292,7 @@
 	} else {
 		// Delete flowID from onu
 		onu.DeleteFlowID(flow.FlowId)
-		utils.LoggerWithOnu(onu).WithFields(log.Fields{
+		device.LoggerWithOnu(onu).WithFields(log.Fields{
 			"olt":   s.Olt.ID,
 			"c_tag": flow.Action.IVid,
 		}).Debug("OLT receives FlowRemove().")
diff --git a/core/io_worker.go b/core/io_worker.go
index c59b903..00ecda3 100644
--- a/core/io_worker.go
+++ b/core/io_worker.go
@@ -18,14 +18,14 @@
 
 import (
 	"errors"
+	"net"
+	"strconv"
+
 	"gerrit.opencord.org/voltha-bbsim/common/logger"
-	"gerrit.opencord.org/voltha-bbsim/common/utils"
 	"gerrit.opencord.org/voltha-bbsim/device"
 	"github.com/google/gopacket"
 	"github.com/google/gopacket/layers"
 	"github.com/google/gopacket/pcap"
-	"net"
-	"strconv"
 )
 
 // RecvWorker receives the packet and forwards to the channel
@@ -46,9 +46,9 @@
 func SendUni(handle *pcap.Handle, packet gopacket.Packet, onu *device.Onu) {
 	err := handle.WritePacketData(packet.Data())
 	if err != nil {
-		utils.LoggerWithOnu(onu).Errorf("Error in send packet to UNI-IF: %v e:%v", *handle, err)
+		device.LoggerWithOnu(onu).Errorf("Error in send packet to UNI-IF: %v e:%v", *handle, err)
 	}
-	utils.LoggerWithOnu(onu).Debugf("Successfully send packet to UNI-IF: %v", *handle)
+	device.LoggerWithOnu(onu).Debugf("Successfully send packet to UNI-IF: %v", *handle)
 }
 
 // SendNni sends packaet to NNI interface
@@ -117,7 +117,7 @@
 			layers.LayerTypeEthernet,
 			gopacket.Default,
 		)
-		utils.LoggerWithOnu(onu).Debugf("Push the 802.1Q header (VID: %d)", vid)
+		device.LoggerWithOnu(onu).Debugf("Push the 802.1Q header (VID: %d)", vid)
 		return ret, nil
 	}
 	return nil, errors.New("failed to push vlan")
@@ -177,7 +177,7 @@
 		snapshotLen int32 = 1518
 		promiscuous       = false
 		err         error
-		timeout           = pcap.BlockForever
+		timeout     = pcap.BlockForever
 	)
 	handle, err := pcap.OpenLive(device, snapshotLen, promiscuous, timeout)
 	if err != nil {
diff --git a/core/omci.go b/core/omci.go
index a83c07a..2566f2a 100644
--- a/core/omci.go
+++ b/core/omci.go
@@ -18,6 +18,7 @@
 
 import (
 	"context"
+
 	"gerrit.opencord.org/voltha-bbsim/common/logger"
 	openolt "gerrit.opencord.org/voltha-bbsim/protos"
 	omci "github.com/opencord/omci-sim"
@@ -43,7 +44,6 @@
 					omciIn <- resp
 					s.handleOmciAction(resp.Pkt, resp.IntfId, resp.OnuId)
 
-
 				case *omci.OmciError:
 					// Error in processing omci message. Log and carry on.
 					logger.Debug("%s", err.Msg)
diff --git a/core/openolt_service.go b/core/openolt_service.go
index dc48577..489e185 100644
--- a/core/openolt_service.go
+++ b/core/openolt_service.go
@@ -20,7 +20,6 @@
 	"time"
 
 	"gerrit.opencord.org/voltha-bbsim/common/logger"
-	"gerrit.opencord.org/voltha-bbsim/common/utils"
 	"gerrit.opencord.org/voltha-bbsim/device"
 	openolt "gerrit.opencord.org/voltha-bbsim/protos"
 )
@@ -88,24 +87,24 @@
 		logger.Error("Failed to send ONUDiscInd [id: %d]: %v", onu.OnuID, err)
 		return err
 	}
-	utils.LoggerWithOnu(onu).Info("sendONUDiscInd Onuid")
+	device.LoggerWithOnu(onu).Info("sendONUDiscInd Onuid")
 	return nil
 }
 
 func sendOnuInd(stream openolt.Openolt_EnableIndicationServer, onu *device.Onu, delay int, operState string, adminState string) error {
 	time.Sleep(time.Duration(delay) * time.Millisecond)
 	data := &openolt.Indication_OnuInd{OnuInd: &openolt.OnuIndication{
-		IntfId:         onu.IntfID,
-		OnuId:          onu.OnuID,
-		OperState:      operState,
-		AdminState:     adminState,
-		SerialNumber:   onu.SerialNumber,
+		IntfId:       onu.IntfID,
+		OnuId:        onu.OnuID,
+		OperState:    operState,
+		AdminState:   adminState,
+		SerialNumber: onu.SerialNumber,
 	}}
 	if err := stream.Send(&openolt.Indication{Data: data}); err != nil {
 		logger.Error("Failed to send ONUInd [id: %d]: %v", onu.OnuID, err)
 		return err
 	}
-	utils.LoggerWithOnu(onu).Info("sendONUInd Onuid")
+	device.LoggerWithOnu(onu).Info("sendONUInd Onuid")
 	return nil
 }
 
diff --git a/device/device_olt.go b/device/device_olt.go
index 5f34a03..b3dc2c3 100644
--- a/device/device_olt.go
+++ b/device/device_olt.go
@@ -48,8 +48,8 @@
 	Name               string
 	InternalState      DeviceState
 	OperState          string
-	NniIntfs		   []nniIntf
-	PonIntfs		   []ponIntf
+	NniIntfs           []nniIntf
+	PonIntfs           []ponIntf
 	HeartbeatSignature uint32
 	mu                 *sync.Mutex
 }
@@ -186,4 +186,4 @@
 func (olt *Olt) UpdatePonPortState(portID uint32, alarmState AlarmState, operState string) {
 	olt.PonIntfs[portID].AlarmState = alarmState
 	olt.PonIntfs[portID].OperState = operState
-}
\ No newline at end of file
+}
diff --git a/common/utils/utils.go b/device/utils.go
similarity index 69%
rename from common/utils/utils.go
rename to device/utils.go
index 3bfd0de..bf5bfaa 100644
--- a/common/utils/utils.go
+++ b/device/utils.go
@@ -14,32 +14,23 @@
  * limitations under the License.
  */
 
-package utils
+package device
 
 import (
-	"strconv"
+	"fmt"
 
 	"gerrit.opencord.org/voltha-bbsim/common/logger"
-	"gerrit.opencord.org/voltha-bbsim/device"
 	log "github.com/sirupsen/logrus"
+	"strconv"
 )
 
-// ConvB2S converts byte array to string
-func ConvB2S(b []byte) string {
-	s := ""
-	for _, i := range b {
-		s = s + strconv.FormatInt(int64(i/16), 16) + strconv.FormatInt(int64(i%16), 16)
-	}
-	return s
+func OnuToSn(onu *Onu) string {
+	// FIXME
+	// see https://github.com/opencord/voltha/blob/master/voltha/adapters/openolt/openolt_device.py#L929-L943
+	return string(onu.SerialNumber.VendorId) + "00000" + fmt.Sprint(onu.IntfID) + "0" + fmt.Sprintf("%x", onu.OnuID-1)
 }
 
-// OnuToSn returns serial number in string format for given ONU
-func OnuToSn(onu *device.Onu) string {
-	return string(onu.SerialNumber.VendorId) + ConvB2S(onu.SerialNumber.VendorSpecific)
-}
-
-// LoggerWithOnu method logs ONU fields
-func LoggerWithOnu(onu *device.Onu) *log.Entry {
+func LoggerWithOnu(onu *Onu) *log.Entry {
 
 	if onu == nil {
 		logger.Warn("utils.LoggerWithOnu has been called without Onu")
@@ -48,8 +39,16 @@
 
 	return logger.GetLogger().WithFields(log.Fields{
 		"serial_number": OnuToSn(onu),
-		"interfaceID":   onu.IntfID,
-		"onuID":         onu.OnuID,
-		"oltID":         onu.OltID,
+		"interfaceId":   onu.IntfID,
+		"onuId":         onu.OnuID,
+		"oltId":         onu.OltID,
 	})
 }
+
+func ConvB2S(b []byte) string {
+	s := ""
+	for _, i := range b {
+		s = s + strconv.FormatInt(int64(i/16), 16) + strconv.FormatInt(int64(i%16), 16)
+	}
+	return s
+}
