diff --git a/pkg/events/common.go b/pkg/events/common.go
index 9ef5bfe..0f0468e 100644
--- a/pkg/events/common.go
+++ b/pkg/events/common.go
@@ -16,7 +16,7 @@
 package events
 
 import (
-	"github.com/opencord/voltha-lib-go/v6/pkg/log"
+	"github.com/opencord/voltha-lib-go/v7/pkg/log"
 )
 
 var logger log.CLogger
diff --git a/pkg/events/eventif/events_proxy_if.go b/pkg/events/eventif/events_proxy_if.go
index 35f821f..e4ebc36 100644
--- a/pkg/events/eventif/events_proxy_if.go
+++ b/pkg/events/eventif/events_proxy_if.go
@@ -18,7 +18,8 @@
 
 import (
 	"context"
-	"github.com/opencord/voltha-protos/v4/go/voltha"
+
+	"github.com/opencord/voltha-protos/v5/go/voltha"
 )
 
 // EventProxy interface for eventproxy
@@ -31,6 +32,8 @@
 		subCategory *EventSubCategory, raisedTs int64) error
 	EnableLivenessChannel(ctx context.Context, enable bool) chan bool
 	SendLiveness(ctx context.Context) error
+	Start() error
+	Stop()
 }
 
 const (
diff --git a/pkg/events/events_proxy.go b/pkg/events/events_proxy.go
index 89d58a0..e4493f9 100644
--- a/pkg/events/events_proxy.go
+++ b/pkg/events/events_proxy.go
@@ -26,11 +26,11 @@
 	"sync"
 	"time"
 
-	"github.com/golang/protobuf/ptypes"
-	"github.com/opencord/voltha-lib-go/v6/pkg/events/eventif"
-	"github.com/opencord/voltha-lib-go/v6/pkg/kafka"
-	"github.com/opencord/voltha-lib-go/v6/pkg/log"
-	"github.com/opencord/voltha-protos/v4/go/voltha"
+	"github.com/opencord/voltha-lib-go/v7/pkg/events/eventif"
+	"github.com/opencord/voltha-lib-go/v7/pkg/kafka"
+	"github.com/opencord/voltha-lib-go/v7/pkg/log"
+	"github.com/opencord/voltha-protos/v5/go/voltha"
+	"google.golang.org/protobuf/types/known/timestamppb"
 )
 
 // TODO: Make configurable through helm chart
@@ -97,17 +97,8 @@
 	header.TypeVersion = eventif.EventTypeVersion
 
 	// raisedTs is in seconds
-	timestamp, err := ptypes.TimestampProto(time.Unix(raisedTs, 0))
-	if err != nil {
-		return nil, err
-	}
-	header.RaisedTs = timestamp
-
-	timestamp, err = ptypes.TimestampProto(time.Now())
-	if err != nil {
-		return nil, err
-	}
-	header.ReportedTs = timestamp
+	header.RaisedTs = timestamppb.New(time.Unix(raisedTs, 0))
+	header.ReportedTs = timestamppb.New(time.Now())
 
 	return &header, nil
 }
@@ -201,7 +192,7 @@
 }
 
 // Start the event proxy
-func (ep *EventProxy) Start() {
+func (ep *EventProxy) Start() error {
 	eq := ep.eventQueue
 	go eq.start(ep.queueCtx)
 	logger.Debugw(context.Background(), "event-proxy-starting...", log.Fields{"events-threashold": EVENT_THRESHOLD})
@@ -235,10 +226,13 @@
 				"reported-ts": event.Header.ReportedTs, "event-type": event.EventType})
 		}
 	}
+	return nil
 }
 
 func (ep *EventProxy) Stop() {
-	ep.eventQueue.stop()
+	if ep.eventQueue != nil {
+		ep.eventQueue.stop()
+	}
 }
 
 type EventQueue struct {
diff --git a/pkg/events/events_proxy_test.go b/pkg/events/events_proxy_test.go
index d968713..70f1e30 100644
--- a/pkg/events/events_proxy_test.go
+++ b/pkg/events/events_proxy_test.go
@@ -18,16 +18,16 @@
 
 import (
 	"context"
-	"github.com/golang/protobuf/ptypes"
-	"github.com/opencord/voltha-lib-go/v6/pkg/kafka"
-	"github.com/opencord/voltha-lib-go/v6/pkg/log"
-	mock_kafka "github.com/opencord/voltha-lib-go/v6/pkg/mocks/kafka"
-	"github.com/opencord/voltha-protos/v4/go/common"
-	"github.com/opencord/voltha-protos/v4/go/voltha"
-	"github.com/stretchr/testify/assert"
 	"strconv"
 	"testing"
 	"time"
+
+	"github.com/opencord/voltha-lib-go/v7/pkg/kafka"
+	"github.com/opencord/voltha-lib-go/v7/pkg/log"
+	mock_kafka "github.com/opencord/voltha-lib-go/v7/pkg/mocks/kafka"
+	"github.com/opencord/voltha-protos/v5/go/common"
+	"github.com/opencord/voltha-protos/v5/go/voltha"
+	"github.com/stretchr/testify/assert"
 )
 
 const waitForKafkaEventsTimeout = 20 * time.Second
@@ -70,14 +70,11 @@
 	for {
 		select {
 		case msg := <-kafkaChnl:
-			if msg.Body != nil {
-				event := voltha.Event{}
-				if err := ptypes.UnmarshalAny(msg.Body, &event); err == nil {
-					count += 1
-					if count == numEvents {
-						resp <- "ok"
-						break loop
-					}
+			if _, ok := msg.(*voltha.Event); ok {
+				count += 1
+				if count == numEvents {
+					resp <- "ok"
+					break loop
 				}
 			}
 		case <-timer.C:
@@ -87,10 +84,10 @@
 	}
 }
 
-func createAndSendEvent(proxy *EventProxy, ID string) error {
+func createAndSendEvent(proxy *EventProxy, id string) error {
 	eventMsg := &voltha.RPCEvent{
 		Rpc:         "dummy",
-		OperationId: ID,
+		OperationId: id,
 		ResourceId:  "dummy",
 		Service:     "dummy",
 		StackId:     "dummy",
@@ -121,7 +118,11 @@
 
 	// Init Event Proxy
 	ep := NewEventProxy(MsgClient(cTkc), MsgTopic(topic))
-	go ep.Start()
+	go func() {
+		if err := ep.Start(); err != nil {
+			logger.Fatalw(context.Background(), "failure-starting-event-proxy", log.Fields{"error": err})
+		}
+	}()
 	time.Sleep(1 * time.Millisecond)
 	for i := 0; i < numEvents; i++ {
 		go func(ID int) {
@@ -147,7 +148,11 @@
 	resp := make(chan string)
 	// Init Event Proxy
 	ep := NewEventProxy(MsgClient(cTkc), MsgTopic(topic))
-	go ep.Start()
+	go func() {
+		if err := ep.Start(); err != nil {
+			logger.Fatalw(context.Background(), "failure-starting-event-proxy", log.Fields{"error": err})
+		}
+	}()
 	time.Sleep(1 * time.Millisecond)
 	for i := 0; i < numEvents; i++ {
 		go func(ID int) {
@@ -171,7 +176,11 @@
 	resp := make(chan string)
 	// Init Event Proxy
 	ep := NewEventProxy(MsgClient(cTkc), MsgTopic(topic))
-	go ep.Start()
+	go func() {
+		if err := ep.Start(); err != nil {
+			logger.Fatalw(context.Background(), "failure-starting-event-proxy", log.Fields{"error": err})
+		}
+	}()
 	time.Sleep(1 * time.Millisecond)
 	go ep.Stop()
 	go waitForEventProxyToStop(ep, resp)
diff --git a/pkg/events/utils.go b/pkg/events/utils.go
index fe3a017..4598161 100644
--- a/pkg/events/utils.go
+++ b/pkg/events/utils.go
@@ -19,7 +19,8 @@
 	"fmt"
 	"strconv"
 
-	"github.com/opencord/voltha-protos/v4/go/voltha"
+	"github.com/opencord/voltha-protos/v5/go/common"
+	"github.com/opencord/voltha-protos/v5/go/voltha"
 )
 
 type ContextType string
@@ -64,8 +65,8 @@
 
 //CreateDeviceStateChangeEvent forms and returns a new DeviceStateChange Event
 func CreateDeviceStateChangeEvent(serialNumber string, deviceID string, parentID string,
-	prevOperStatus voltha.OperStatus_Types, prevConnStatus voltha.ConnectStatus_Types, prevAdminStatus voltha.AdminState_Types,
-	operStatus voltha.OperStatus_Types, connStatus voltha.ConnectStatus_Types, adminStatus voltha.AdminState_Types,
+	prevOperStatus common.OperStatus_Types, prevConnStatus common.ConnectStatus_Types, prevAdminStatus common.AdminState_Types,
+	operStatus common.OperStatus_Types, connStatus common.ConnectStatus_Types, adminStatus common.AdminState_Types,
 	parentPort uint32, isRoot bool) *voltha.DeviceEvent {
 
 	context := make(map[string]string)
