diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..6ea046e
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,5 @@
+module gerrit.opencord.org/omci-sim
+
+go 1.12
+
+require github.com/sirupsen/logrus v1.4.2
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..400b0b0
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,7 @@
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
diff --git a/omci_common.go b/omci_common.go
index 223fe0e..55c3b02 100644
--- a/omci_common.go
+++ b/omci_common.go
@@ -18,7 +18,7 @@
 
 import (
 	"fmt"
-	"log"
+	log "github.com/sirupsen/logrus"
 )
 
 type OmciError struct {
@@ -38,7 +38,10 @@
 }
 
 func GetAttributes(class OmciClass, content OmciContent, key OnuKey, pkt []byte) []byte {
-	log.Printf("GetAttributes() invoked with onu key: %+v\n", key)
+	log.WithFields(log.Fields{
+		"IntfId": key.IntfId,
+		"OnuId": key.OnuId,
+	}).Tracef("GetAttributes() invoked")
 
 	switch class {
 	case ANIG:
@@ -53,7 +56,11 @@
 	default:
 		// For unimplemented MEs, just fill in the attribute mask and return 0 values for the requested attributes
 		// TODO implement Get for unimplemented MEs as well
-		log.Printf("Unimplemeted GetAttributes for ME Class: %v " +
+		log.WithFields(log.Fields{
+			"IntfId": key.IntfId,
+			"OnuId": key.OnuId,
+			"class": class,
+		}).Warnf("Unimplemeted GetAttributes for ME Class: %v " +
 		    "Filling with zero value for the requested attributes", class)
 		AttributesMask := getAttributeMask(content)
 		pkt[8] = 0x00 // Command Processed Successfully
@@ -66,6 +73,9 @@
 
 func getAttributeMask(content OmciContent) int {
 	// mask is present in pkt[8] and pkt[9]
-	log.Printf("GetAttributeMask() invoked\n content[0] , content[1]: %+v, %+v", content[0], content[1])
+	log.WithFields(log.Fields{
+		"content[0]": content[0],
+		"content[1]": content[1],
+	}).Tracef("GetAttributeMask() invoked")
 	return (int(content[0]) << 8) | int(content[1])
 }
diff --git a/omci_defs.go b/omci_defs.go
index e278d9b..dfa0f52 100644
--- a/omci_defs.go
+++ b/omci_defs.go
@@ -19,7 +19,8 @@
 	"bytes"
 	"encoding/binary"
 	"errors"
-	"log"
+	"fmt"
+	log "github.com/sirupsen/logrus"
 )
 
 //
@@ -29,6 +30,60 @@
 // OmciMsgType represents a OMCI message-type
 type OmciMsgType byte
 
+func (t OmciMsgType) PrettyPrint() string {
+	switch t {
+	case Create:
+		return "Create"
+	case Delete:
+		return "Delete"
+	case Set:
+		return "Set"
+	case Get:
+		return "Get"
+	case GetAllAlarms:
+		return "GetAllAlarms"
+	case GetAllAlarmsNext:
+		return "GetAllAlarmsNext"
+	case MibUpload:
+		return "MibUpload"
+	case MibUploadNext:
+		return "MibUploadNext"
+	case MibReset:
+		return "MibReset"
+	case AlarmNotification:
+		return "AlarmNotification"
+	case AttributeValueChange:
+		return "AttributeValueChange"
+	case Test:
+		return "Test"
+	case StartSoftwareDownload:
+		return "StartSoftwareDownload"
+	case DownloadSection:
+		return "DownloadSection"
+	case EndSoftwareDownload:
+		return "EndSoftwareDownload"
+	case ActivateSoftware:
+		return "ActivateSoftware"
+	case CommitSoftware:
+		return "CommitSoftware"
+	case SynchronizeTime:
+		return "SynchronizeTime"
+	case Reboot:
+		return "Reboot"
+	case GetNext:
+		return "GetNext"
+	case TestResult:
+		return "TestResult"
+	case GetCurrentData:
+		return "GetCurrentData"
+	case SetTable:
+		return "SetTable"
+	default:
+		log.Warnf("Cant't convert state %v to string", t)
+		return string(t)
+	}
+}
+
 const (
 	// Message Types
 	_                                 = iota
@@ -90,8 +145,11 @@
 	r := bytes.NewReader(pkt)
 
 	if err := binary.Read(r, binary.BigEndian, &m); err != nil {
-		log.Printf("binary.Read failed: %s", err)
-		return 0, 0, 0, 0, 0, OmciContent{}, errors.New("binary.Read failed")
+		log.WithFields(log.Fields{
+			"Packet": pkt,
+			"omciMsg": fmt.Sprintf("%x", pkt),
+		}).Errorf("Failed to read packet: %s", err)
+		return 0, 0, 0, 0, 0, OmciContent{}, errors.New("Failed to read packet")
 	}
 	/*    Message Type = Set
 	      0... .... = Destination Bit: 0x0
@@ -99,7 +157,15 @@
 	      ..0. .... = Acknowledgement: 0x0
 	      ...0 1000 = Message Type: Set (8)
 	*/
-	log.Printf("OmciRun - TransactionId: %d MessageType: %d, ME Class: %d, ME Instance: %d, Content: %x",
-		m.TransactionId, m.MessageType&0x1F, m.MessageId.Class, m.MessageId.Instance, m.Content)
+
+	log.WithFields(log.Fields{
+		"TransactionId": m.TransactionId,
+		"MessageType": m.MessageType.PrettyPrint(),
+		"MeClass": m.MessageId.Class,
+		"MeInstance": m.MessageId.Instance,
+		"Conent": m.Content,
+		"Packet": pkt,
+	}).Tracef("Parsing OMCI Packet")
+
 	return m.TransactionId, m.DeviceId, m.MessageType & 0x1F, m.MessageId.Class, m.MessageId.Instance, m.Content, nil
 }
diff --git a/omci_handlers.go b/omci_handlers.go
index 1ebaaea..ec7f712 100644
--- a/omci_handlers.go
+++ b/omci_handlers.go
@@ -20,7 +20,7 @@
 	"encoding/binary"
 	"errors"
 	"fmt"
-	"log"
+	log "github.com/sirupsen/logrus"
 )
 
 type OmciMsgHandler func(class OmciClass, content OmciContent, key OnuKey) ([]byte, error)
@@ -42,9 +42,15 @@
 func mibReset(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
 	var pkt []byte
 
-	log.Printf("%v - Omci MibReset", key)
+	log.WithFields(log.Fields{
+		"IntfId": key.IntfId,
+		"OnuId": key.OnuId,
+	}).Tracef("Omci MibReset")
 	if state, ok := OnuOmciStateMap[key]; ok {
-		log.Printf("%v - Reseting OnuOmciState", key)
+		log.WithFields(log.Fields{
+		"IntfId": key.IntfId,
+		"OnuId": key.OnuId,
+	}).Tracef("Reseting OnuOmciState")
 		state.ResetOnuOmciState()
 	}
 
@@ -61,7 +67,10 @@
 func mibUpload(class OmciClass, content OmciContent, key OnuKey) ([]byte, error) {
 	var pkt []byte
 
-	log.Printf("%v - Omci MibUpload", key)
+	log.WithFields(log.Fields{
+		"IntfId": key.IntfId,
+		"OnuId": key.OnuId,
+	}).Tracef("Omci MibUpload")
 
 	pkt = []byte{
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
@@ -84,7 +93,11 @@
 
 	// commandNumber is the "Command number" attribute received in "MIB Upload Next" OMCI message
 	commandNumber := (uint16(content[1])) | (uint16(content[0])<<8)
-	log.Printf("%v - Omci MibUploadNext %d", key, commandNumber)
+	log.WithFields(log.Fields{
+		"IntfId": key.IntfId,
+		"OnuId": key.OnuId,
+		"CommandNumber": commandNumber,
+	}).Tracef("Omci MibUploadNext")
 
 	switch commandNumber {
 	case 0:
@@ -235,7 +248,7 @@
 	     218, 222, 226, 230, 234, 238, 242, 246,
 	     250, 254, 258, 262, 266, 270, 274, 278:
 		// Prior-Q with mask downstream
-		log.Println("Mib-upload for prior-q with mask")
+		log.Tracef("Mib-upload for prior-q with mask")
 		// For downstream PQ, pkt[10] is 0x00
 		// So the instanceId will be like 0x0001, 0x0002,... etc
 		pkt = []byte{
@@ -278,7 +291,7 @@
 
 		// Only for verification. To be removed
 		if state.tcontPointer > state.tcontInstance {
-			log.Println("Error: Invalid TcontPointer")
+			log.Tracef("Error: Invalid TcontPointer")
 			break
 		}
 
@@ -363,7 +376,7 @@
 
 	default:
 		state.extraMibUploadCtr++
-		errstr := fmt.Sprintf("%v - Invalid MibUpload request: %d, extras: %d", key, state.mibUploadCtr, state.extraMibUploadCtr)
+		errstr := fmt.Sprintf("%v - Invalid MibUpload request: %d, extras: %d", key, state.mibUploadCtr, state)
 		return nil, errors.New(errstr)
 	}
 
@@ -382,7 +395,10 @@
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
 
-	log.Printf("%v - Omci Set", key)
+	log.WithFields(log.Fields{
+		"IntfId": key.IntfId,
+		"OnuId": key.OnuId,
+	}).Tracef("Omci Set")
 
 	return pkt, nil
 }
@@ -392,11 +408,17 @@
 
 	if class == GEMPortNetworkCTP {
 		if onuOmciState, ok := OnuOmciStateMap[key]; !ok {
-			log.Printf("%v - ONU Key Error", key)
+			log.WithFields(log.Fields{
+				"IntfId": key.IntfId,
+				"OnuId": key.OnuId,
+			}).Tracef("ONU Key Error")
 			return nil, errors.New("ONU Key Error")
 		} else {
 			onuOmciState.gemPortId = binary.BigEndian.Uint16(content[:2])
-			log.Printf("%v - Gem Port Id %d", key, onuOmciState.gemPortId)
+			log.WithFields(log.Fields{
+				"IntfId": key.IntfId,
+				"OnuId": key.OnuId,
+			}).Tracef("Gem Port Id %d", key, onuOmciState)
 			// FIXME
 			OnuOmciStateMap[key].state = DONE
 		}
@@ -410,7 +432,10 @@
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
 
-	log.Printf("%v - Omci Create", key)
+	log.WithFields(log.Fields{
+		"IntfId": key.IntfId,
+		"OnuId": key.OnuId,
+	}).Tracef("Omci Create")
 
 	return pkt, nil
 }
@@ -428,7 +453,10 @@
 
 	pkt = GetAttributes(class, content, key, pkt)
 
-	log.Printf("%v - Omci Get", key)
+	log.WithFields(log.Fields{
+		"IntfId": key.IntfId,
+		"OnuId": key.OnuId,
+	}).Tracef("Omci Get")
 	return pkt, nil
 }
 
@@ -443,7 +471,10 @@
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
 
-	log.Printf("%v - Omci GetAllAlarms", key)
+	log.WithFields(log.Fields{
+		"IntfId": key.IntfId,
+		"OnuId": key.OnuId,
+	}).Tracef("Omci GetAllAlarms")
 
 	return pkt, nil
 }
@@ -459,7 +490,10 @@
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
 
-	log.Printf("%v - Omci syncTime", key)
+	log.WithFields(log.Fields{
+		"IntfId": key.IntfId,
+		"OnuId": key.OnuId,
+	}).Tracef("Omci syncTime")
 
 	return pkt, nil
 }
@@ -475,7 +509,10 @@
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
 
-	log.Printf("%v - Omci GetAllAlarmsNext", key)
+	log.WithFields(log.Fields{
+		"IntfId": key.IntfId,
+		"OnuId": key.OnuId,
+	}).Tracef("Omci GetAllAlarmsNext")
 
 	return pkt, nil
 }
@@ -491,7 +528,10 @@
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
 
-	log.Printf("%v - Omci Delete", key)
+	log.WithFields(log.Fields{
+		"IntfId": key.IntfId,
+		"OnuId": key.OnuId,
+	}).Tracef("Omci Delete")
 
 	return pkt, nil
 }
@@ -506,7 +546,10 @@
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
 
-	log.Printf("%v - Omci Reboot", key)
+	log.WithFields(log.Fields{
+		"IntfId": key.IntfId,
+		"OnuId": key.OnuId,
+	}).Tracef("Omci Reboot")
 	return pkt, nil
 }
 
diff --git a/omci_sim.go b/omci_sim.go
index 50335f2..5980db1 100644
--- a/omci_sim.go
+++ b/omci_sim.go
@@ -16,20 +16,33 @@
 
 package core
 
-import "log"
-
+import (
+	"fmt"
+	log "github.com/sirupsen/logrus"
+)
 
 func OmciSim(intfId uint32, onuId uint32, request []byte) ([]byte, error) {
 	var resp []byte
 
 	transactionId, deviceId, msgType, class, instance, content, err := ParsePkt(request)
 	if err != nil {
-		log.Printf("ONU {intfid:%d, onuid:%d} - Cannot parse omci msg", intfId, onuId)
-		return resp, &OmciError{"Cannot parse omci msg"}
+		log.WithFields(log.Fields{
+			"IntfId": intfId,
+			"OnuId": onuId,
+		}).Errorf("Cannot parse OMCI msg")
+		return resp, &OmciError{"Cannot parse OMCI msg"}
 	}
 
-	log.Printf("ONU {intfid:%d, onuid:%d} - OmciRun - transactionId: %d msgType: %d, ME Class: %d, ME Instance: %d",
-		intfId, onuId, transactionId, msgType, class, instance)
+	log.WithFields(log.Fields{
+		"IntfId": intfId,
+		"OnuId": onuId,
+		"TransactionId": transactionId,
+		"MessageType": msgType.PrettyPrint(),
+		"MeClass": class,
+		"MeInstance": instance,
+		//"Conent": content,
+		"omciMsg": fmt.Sprintf("%x", content),
+	}).Debugf("Processing OMCI pakcet")
 
 	key := OnuKey{intfId, onuId}
 	if _, ok := OnuOmciStateMap[key]; !ok {
@@ -37,13 +50,21 @@
 	}
 
 	if _, ok := Handlers[msgType]; !ok {
-		log.Printf("ONU {intfid:%d, onuid:%d} - Ignore omci msg (msgType %d not handled)", intfId, onuId, msgType)
+		log.WithFields(log.Fields{
+			"IntfId": intfId,
+			"OnuId": onuId,
+			"msgType": msgType,
+		}).Errorf("Ignoring omci msg (msgType %d not handled)", msgType)
 		return resp, &OmciError{"Unimplemented omci msg"}
 	}
 
 	resp, err = Handlers[msgType](class, content, key)
 	if err != nil {
-		log.Printf("ONU {intfid:%d, onuid:%d} - Unable to send a successful response, error:%s", intfId, onuId, err)
+		log.WithFields(log.Fields{
+			"IntfId": intfId,
+			"OnuId": onuId,
+			"msgType": msgType,
+		}).Errorf("Unable to send a successful response, error: %s", err)
 		return resp, nil
 	}
 
@@ -76,7 +97,12 @@
 		}
 	}
 
-	log.Printf("OMCI-SIM Response %+x\n", resp)
+	log.WithFields(log.Fields{
+		"IntfId": intfId,
+		"OnuId": onuId,
+		"msgType": msgType.PrettyPrint(),
+		"omciMsg": fmt.Sprintf("%x", resp),
+	}).Debugf("OMCI-SIM Response")
 
 	return resp, nil
-}
+}
\ No newline at end of file
diff --git a/omci_state.go b/omci_state.go
index 6af433f..34d5b5e 100644
--- a/omci_state.go
+++ b/omci_state.go
@@ -18,6 +18,7 @@
 import (
 	"errors"
 	"fmt"
+	log "github.com/sirupsen/logrus"
 )
 
 type OnuOmciState struct {
@@ -78,3 +79,8 @@
 	errmsg := fmt.Sprintf("ONU {intfid:%d, onuid:%d} - Failed to find a key in OnuOmciStateMap", intfId, onuId)
 	return 0, errors.New(errmsg)
 }
+
+func CheckIsTeo() string {
+	log.Warn("It's TEO!")
+	return "It's TEO!"
+}
