diff --git a/internal/pkg/mock/voltha_client_mock.go b/internal/pkg/mock/voltha_client_mock.go
index 735c4e4..7c1933e 100644
--- a/internal/pkg/mock/voltha_client_mock.go
+++ b/internal/pkg/mock/voltha_client_mock.go
@@ -21,6 +21,7 @@
 
 	. "github.com/golang/protobuf/ptypes/empty"
 	"github.com/opencord/voltha-protos/v5/go/common"
+	"github.com/opencord/voltha-protos/v5/go/extension"
 	"github.com/opencord/voltha-protos/v5/go/omci"
 	"github.com/opencord/voltha-protos/v5/go/openflow_13"
 	. "github.com/opencord/voltha-protos/v5/go/voltha"
@@ -32,14 +33,6 @@
 	LogicalPorts       LogicalPorts
 }
 
-func (c MockVolthaClient) GetMembership(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Membership, error) {
-	return &Membership{}, nil
-}
-
-func (c MockVolthaClient) UpdateMembership(ctx context.Context, in *Membership, opts ...grpc.CallOption) (*Empty, error) {
-	return &Empty{}, nil
-}
-
 func (c MockVolthaClient) GetVoltha(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Voltha, error) {
 	return &Voltha{}, nil
 }
@@ -196,10 +189,6 @@
 	return &DeviceType{}, nil
 }
 
-func (c MockVolthaClient) ListDeviceGroups(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*DeviceGroups, error) {
-	return &DeviceGroups{}, nil
-}
-
 func (c MockVolthaClient) StreamPacketsOut(ctx context.Context, opts ...grpc.CallOption) (VolthaService_StreamPacketsOutClient, error) {
 	return nil, nil
 }
@@ -212,10 +201,6 @@
 	return nil, nil
 }
 
-func (c MockVolthaClient) GetDeviceGroup(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*DeviceGroup, error) {
-	return &DeviceGroup{}, nil
-}
-
 func (c MockVolthaClient) CreateEventFilter(ctx context.Context, in *EventFilter, opts ...grpc.CallOption) (*EventFilter, error) {
 	return &EventFilter{}, nil
 }
@@ -256,10 +241,6 @@
 	return &common.OperationResp{}, nil
 }
 
-func (c MockVolthaClient) Subscribe(ctx context.Context, in *OfAgentSubscriber, opts ...grpc.CallOption) (*OfAgentSubscriber, error) {
-	return &OfAgentSubscriber{}, nil
-}
-
 func (c MockVolthaClient) EnablePort(ctx context.Context, in *Port, opts ...grpc.CallOption) (*Empty, error) {
 	return &Empty{}, nil
 }
@@ -268,19 +249,19 @@
 	return &Empty{}, nil
 }
 
-func (c MockVolthaClient) GetExtValue(ctx context.Context, in *common.ValueSpecifier, opts ...grpc.CallOption) (*common.ReturnValues, error) {
-	return &common.ReturnValues{}, nil
+func (c MockVolthaClient) GetExtValue(ctx context.Context, in *extension.ValueSpecifier, opts ...grpc.CallOption) (*extension.ReturnValues, error) {
+	return &extension.ReturnValues{}, nil
 }
 
-func (c MockVolthaClient) StartOmciTestAction(ctx context.Context, in *OmciTestRequest, opts ...grpc.CallOption) (*TestResponse, error) {
-	return &TestResponse{}, nil
+func (c MockVolthaClient) StartOmciTestAction(ctx context.Context, in *omci.OmciTestRequest, opts ...grpc.CallOption) (*omci.TestResponse, error) {
+	return &omci.TestResponse{}, nil
 }
 
 func (c MockVolthaClient) ForceDeleteDevice(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*Empty, error) {
 	return &Empty{}, nil
 }
 
-func (c MockVolthaClient) SetExtValue(ctx context.Context, in *ValueSet, opts ...grpc.CallOption) (*Empty, error) {
+func (c MockVolthaClient) SetExtValue(ctx context.Context, in *extension.ValueSet, opts ...grpc.CallOption) (*Empty, error) {
 	return &Empty{}, nil
 }
 
diff --git a/internal/pkg/ofagent/ofagent.go b/internal/pkg/ofagent/ofagent.go
index efaf39c..bb1ee32 100644
--- a/internal/pkg/ofagent/ofagent.go
+++ b/internal/pkg/ofagent/ofagent.go
@@ -26,7 +26,6 @@
 	"github.com/opencord/voltha-lib-go/v7/pkg/log"
 	"github.com/opencord/voltha-lib-go/v7/pkg/probe"
 	"github.com/opencord/voltha-protos/v5/go/openflow_13"
-	"github.com/opencord/voltha-protos/v5/go/voltha"
 	"google.golang.org/grpc"
 )
 
@@ -57,8 +56,8 @@
 	clientMap        map[string]*openflow.OFClient
 	events           chan ofaEvent
 
-	packetInChannel    chan *voltha.PacketIn
-	packetOutChannel   chan *voltha.PacketOut
+	packetInChannel    chan *openflow_13.PacketIn
+	packetOutChannel   chan *openflow_13.PacketOut
 	changeEventChannel chan *openflow_13.ChangeEvent
 }
 
@@ -70,8 +69,8 @@
 		ConnectionMaxRetries:      config.ConnectionMaxRetries,
 		ConnectionRetryDelay:      config.ConnectionRetryDelay,
 		volthaClient:              &holder.VolthaServiceClientHolder{},
-		packetInChannel:           make(chan *voltha.PacketIn),
-		packetOutChannel:          make(chan *voltha.PacketOut),
+		packetInChannel:           make(chan *openflow_13.PacketIn),
+		packetOutChannel:          make(chan *openflow_13.PacketOut),
 		changeEventChannel:        make(chan *openflow_13.ChangeEvent),
 		clientMap:                 make(map[string]*openflow.OFClient),
 		events:                    make(chan ofaEvent, 100),
diff --git a/internal/pkg/ofagent/packetIn.go b/internal/pkg/ofagent/packetIn.go
index 375e84f..7b396fc 100644
--- a/internal/pkg/ofagent/packetIn.go
+++ b/internal/pkg/ofagent/packetIn.go
@@ -26,7 +26,6 @@
 	"github.com/opencord/ofagent-go/internal/pkg/openflow"
 	"github.com/opencord/voltha-lib-go/v7/pkg/log"
 	"github.com/opencord/voltha-protos/v5/go/openflow_13"
-	"github.com/opencord/voltha-protos/v5/go/voltha"
 	"google.golang.org/grpc"
 )
 
@@ -109,37 +108,37 @@
 				field := oxmField.GetField()
 				ofbField := field.(*openflow_13.OfpOxmField_OfbField).OfbField
 				switch ofbField.Type {
-				case voltha.OxmOfbFieldTypes_OFPXMT_OFB_IN_PORT:
+				case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IN_PORT:
 					ofpInPort := ofp.NewOxmInPort()
 					val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_Port)
 					ofpInPort.Value = ofp.Port(val.Port)
 					fields = append(fields, ofpInPort)
-				case voltha.OxmOfbFieldTypes_OFPXMT_OFB_ETH_TYPE:
+				case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ETH_TYPE:
 					ofpEthType := ofp.NewOxmEthType()
 					val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_EthType)
 					ofpEthType.Value = ofp.EthernetType(val.EthType)
 					fields = append(fields, ofpEthType)
-				case voltha.OxmOfbFieldTypes_OFPXMT_OFB_IN_PHY_PORT:
+				case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IN_PHY_PORT:
 					ofpInPhyPort := ofp.NewOxmInPhyPort()
 					val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_PhysicalPort)
 					ofpInPhyPort.Value = ofp.Port(val.PhysicalPort)
 					fields = append(fields, ofpInPhyPort)
-				case voltha.OxmOfbFieldTypes_OFPXMT_OFB_IP_PROTO:
+				case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IP_PROTO:
 					ofpIpProto := ofp.NewOxmIpProto()
 					val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_IpProto)
 					ofpIpProto.Value = ofp.IpPrototype(val.IpProto)
 					fields = append(fields, ofpIpProto)
-				case voltha.OxmOfbFieldTypes_OFPXMT_OFB_UDP_SRC:
+				case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_UDP_SRC:
 					ofpUdpSrc := ofp.NewOxmUdpSrc()
 					val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_UdpSrc)
 					ofpUdpSrc.Value = uint16(val.UdpSrc)
 					fields = append(fields, ofpUdpSrc)
-				case voltha.OxmOfbFieldTypes_OFPXMT_OFB_UDP_DST:
+				case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_UDP_DST:
 					ofpUdpDst := ofp.NewOxmUdpDst()
 					val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_UdpDst)
 					ofpUdpDst.Value = uint16(val.UdpDst)
 					fields = append(fields, ofpUdpDst)
-				case voltha.OxmOfbFieldTypes_OFPXMT_OFB_VLAN_VID:
+				case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_VLAN_VID:
 					ofpVlanVid := ofp.NewOxmVlanVid()
 					val := ofbField.GetValue()
 					if val != nil {
diff --git a/internal/pkg/openflow/client.go b/internal/pkg/openflow/client.go
index 594f307..9097444 100644
--- a/internal/pkg/openflow/client.go
+++ b/internal/pkg/openflow/client.go
@@ -25,7 +25,7 @@
 	ofp "github.com/opencord/goloxi/of13"
 	"github.com/opencord/ofagent-go/internal/pkg/holder"
 	"github.com/opencord/voltha-lib-go/v7/pkg/log"
-	"github.com/opencord/voltha-protos/v5/go/voltha"
+	"github.com/opencord/voltha-protos/v5/go/openflow_13"
 )
 
 var NoVolthaConnectionError = errors.New("no-voltha-connection")
@@ -112,7 +112,7 @@
 	OFControllerEndPoints []string
 	DeviceID              string
 	VolthaClient          *holder.VolthaServiceClientHolder
-	PacketOutChannel      chan *voltha.PacketOut
+	PacketOutChannel      chan *openflow_13.PacketOut
 	ConnectionMaxRetries  int
 	ConnectionRetryDelay  time.Duration
 
diff --git a/internal/pkg/openflow/connection.go b/internal/pkg/openflow/connection.go
index 1806a99..c625aac 100644
--- a/internal/pkg/openflow/connection.go
+++ b/internal/pkg/openflow/connection.go
@@ -30,14 +30,14 @@
 	ofp "github.com/opencord/goloxi/of13"
 	"github.com/opencord/ofagent-go/internal/pkg/holder"
 	"github.com/opencord/voltha-lib-go/v7/pkg/log"
-	"github.com/opencord/voltha-protos/v5/go/voltha"
+	"github.com/opencord/voltha-protos/v5/go/openflow_13"
 )
 
 type OFConnection struct {
 	OFControllerEndPoint string
 	DeviceID             string
 	VolthaClient         *holder.VolthaServiceClientHolder
-	PacketOutChannel     chan *voltha.PacketOut
+	PacketOutChannel     chan *openflow_13.PacketOut
 	ConnectionMaxRetries int
 	ConnectionRetryDelay time.Duration
 
diff --git a/internal/pkg/openflow/flowMod.go b/internal/pkg/openflow/flowMod.go
index fd71798..a391488 100644
--- a/internal/pkg/openflow/flowMod.go
+++ b/internal/pkg/openflow/flowMod.go
@@ -25,7 +25,6 @@
 	ofp "github.com/opencord/goloxi/of13"
 	"github.com/opencord/voltha-lib-go/v7/pkg/log"
 	"github.com/opencord/voltha-protos/v5/go/openflow_13"
-	"github.com/opencord/voltha-protos/v5/go/voltha"
 )
 
 var oxmMap = map[string]int32{
@@ -92,88 +91,88 @@
 	}
 
 	// Construct the match
-	var oxmList []*voltha.OfpOxmField
+	var oxmList []*openflow_13.OfpOxmField
 	for _, oxmField := range flowAdd.Match.GetOxmList() {
 		name := oxmMap[oxmField.GetOXMName()]
 		val := oxmField.GetOXMValue()
-		field := voltha.OfpOxmOfbField{Type: voltha.OxmOfbFieldTypes(name)}
-		ofpOxmField := voltha.OfpOxmField{
+		field := openflow_13.OfpOxmOfbField{Type: openflow_13.OxmOfbFieldTypes(name)}
+		ofpOxmField := openflow_13.OfpOxmField{
 			OxmClass: ofp.OFPXMCOpenflowBasic,
 			Field:    &openflow_13.OfpOxmField_OfbField{OfbField: &field},
 		}
-		switch voltha.OxmOfbFieldTypes(name) {
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_IN_PORT:
-			field.Value = &voltha.OfpOxmOfbField_Port{
+		switch openflow_13.OxmOfbFieldTypes(name) {
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IN_PORT:
+			field.Value = &openflow_13.OfpOxmOfbField_Port{
 				Port: uint32(val.(ofp.Port)),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_IN_PHY_PORT:
-			field.Value = &voltha.OfpOxmOfbField_PhysicalPort{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IN_PHY_PORT:
+			field.Value = &openflow_13.OfpOxmOfbField_PhysicalPort{
 				PhysicalPort: val.(uint32),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_METADATA:
-			field.Value = &voltha.OfpOxmOfbField_TableMetadata{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_METADATA:
+			field.Value = &openflow_13.OfpOxmOfbField_TableMetadata{
 				TableMetadata: val.(uint64),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_ETH_TYPE:
-			field.Value = &voltha.OfpOxmOfbField_EthType{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ETH_TYPE:
+			field.Value = &openflow_13.OfpOxmOfbField_EthType{
 				EthType: uint32(val.(ofp.EthernetType)),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_IP_PROTO:
-			field.Value = &voltha.OfpOxmOfbField_IpProto{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IP_PROTO:
+			field.Value = &openflow_13.OfpOxmOfbField_IpProto{
 				IpProto: uint32(val.(ofp.IpPrototype)),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_IPV4_DST:
-			field.Value = &voltha.OfpOxmOfbField_Ipv4Dst{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IPV4_DST:
+			field.Value = &openflow_13.OfpOxmOfbField_Ipv4Dst{
 				Ipv4Dst: binary.BigEndian.Uint32(val.(net.IP)),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_ETH_DST:
-			field.Value = &voltha.OfpOxmOfbField_EthDst{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ETH_DST:
+			field.Value = &openflow_13.OfpOxmOfbField_EthDst{
 				EthDst: val.(net.HardwareAddr),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_ETH_SRC:
-			field.Value = &voltha.OfpOxmOfbField_EthSrc{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ETH_SRC:
+			field.Value = &openflow_13.OfpOxmOfbField_EthSrc{
 				EthSrc: val.(net.HardwareAddr),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_UDP_SRC:
-			field.Value = &voltha.OfpOxmOfbField_UdpSrc{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_UDP_SRC:
+			field.Value = &openflow_13.OfpOxmOfbField_UdpSrc{
 				UdpSrc: uint32(val.(uint16)),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_UDP_DST:
-			field.Value = &voltha.OfpOxmOfbField_UdpDst{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_UDP_DST:
+			field.Value = &openflow_13.OfpOxmOfbField_UdpDst{
 				UdpDst: uint32(val.(uint16)),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_VLAN_VID:
-			field.Value = &voltha.OfpOxmOfbField_VlanVid{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_VLAN_VID:
+			field.Value = &openflow_13.OfpOxmOfbField_VlanVid{
 				VlanVid: uint32((val.(uint16) & 0xfff) | 0x1000),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_VLAN_PCP:
-			field.Value = &voltha.OfpOxmOfbField_VlanPcp{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_VLAN_PCP:
+			field.Value = &openflow_13.OfpOxmOfbField_VlanPcp{
 				VlanPcp: uint32(val.(uint8)),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_MPLS_LABEL:
-			field.Value = &voltha.OfpOxmOfbField_MplsLabel{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_MPLS_LABEL:
+			field.Value = &openflow_13.OfpOxmOfbField_MplsLabel{
 				MplsLabel: val.(uint32),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_MPLS_BOS:
-			field.Value = &voltha.OfpOxmOfbField_MplsBos{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_MPLS_BOS:
+			field.Value = &openflow_13.OfpOxmOfbField_MplsBos{
 				MplsBos: uint32(val.(uint8)),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_MPLS_TC:
-			field.Value = &voltha.OfpOxmOfbField_MplsTc{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_MPLS_TC:
+			field.Value = &openflow_13.OfpOxmOfbField_MplsTc{
 				MplsTc: val.(uint32),
 			}
 		case 200: // voltha-protos doesn't actually have a type for vlan_mask
-			field = voltha.OfpOxmOfbField{Type: voltha.OxmOfbFieldTypes(oxmMap["vlan_vid"])}
+			field = openflow_13.OfpOxmOfbField{Type: openflow_13.OxmOfbFieldTypes(oxmMap["vlan_vid"])}
 			field.HasMask = true
-			ofpOxmField = voltha.OfpOxmField{
+			ofpOxmField = openflow_13.OfpOxmField{
 				OxmClass: ofp.OFPXMCOpenflowBasic,
 				Field:    &openflow_13.OfpOxmField_OfbField{OfbField: &field},
 			}
-			field.Value = &voltha.OfpOxmOfbField_VlanVid{
+			field.Value = &openflow_13.OfpOxmOfbField_VlanVid{
 				VlanVid: uint32(val.(uint16)),
 			}
 			vidMask := val.(uint16)
-			field.Mask = &voltha.OfpOxmOfbField_VlanVidMask{
+			field.Mask = &openflow_13.OfpOxmOfbField_VlanVidMask{
 				VlanVidMask: uint32(vidMask),
 			}
 		}
@@ -181,10 +180,10 @@
 	}
 
 	// Construct the instructions
-	var instructions []*voltha.OfpInstruction
+	var instructions []*openflow_13.OfpInstruction
 	for _, ofpInstruction := range flowAdd.GetInstructions() {
 		instructionType := ofpInstruction.GetType()
-		instruction := voltha.OfpInstruction{Type: uint32(instructionType)}
+		instruction := openflow_13.OfpInstruction{Type: uint32(instructionType)}
 		switch instructionType {
 		case ofp.OFPITGotoTable:
 			instruction.Data = &openflow_13.OfpInstruction_GotoTable{
@@ -232,11 +231,11 @@
 	// Construct the request
 	flowUpdate := openflow_13.FlowTableUpdate{
 		Id: ofc.DeviceID,
-		FlowMod: &voltha.OfpFlowMod{
+		FlowMod: &openflow_13.OfpFlowMod{
 			Cookie:      flowAdd.Cookie,
 			CookieMask:  flowAdd.CookieMask,
 			TableId:     uint32(flowAdd.TableId),
-			Command:     voltha.OfpFlowModCommand_OFPFC_ADD,
+			Command:     openflow_13.OfpFlowModCommand_OFPFC_ADD,
 			IdleTimeout: uint32(flowAdd.IdleTimeout),
 			HardTimeout: uint32(flowAdd.HardTimeout),
 			Priority:    uint32(flowAdd.Priority),
@@ -244,8 +243,8 @@
 			OutPort:     uint32(flowAdd.OutPort),
 			OutGroup:    uint32(flowAdd.OutGroup),
 			Flags:       uint32(flowAdd.Flags),
-			Match: &voltha.OfpMatch{
-				Type:      voltha.OfpMatchType(flowAdd.Match.GetType()),
+			Match: &openflow_13.OfpMatch{
+				Type:      openflow_13.OfpMatchType(flowAdd.Match.GetType()),
 				OxmFields: oxmList,
 			},
 
@@ -363,76 +362,76 @@
 	}
 
 	// Construct match
-	var oxmList []*voltha.OfpOxmField
+	var oxmList []*openflow_13.OfpOxmField
 	for _, oxmField := range flowDeleteStrict.Match.GetOxmList() {
 		name := oxmMap[oxmField.GetOXMName()]
 		val := oxmField.GetOXMValue()
-		var ofpOxmField voltha.OfpOxmField
+		var ofpOxmField openflow_13.OfpOxmField
 		ofpOxmField.OxmClass = ofp.OFPXMCOpenflowBasic
-		var field voltha.OfpOxmOfbField
-		field.Type = voltha.OxmOfbFieldTypes(name)
+		var field openflow_13.OfpOxmOfbField
+		field.Type = openflow_13.OxmOfbFieldTypes(name)
 
 		var x openflow_13.OfpOxmField_OfbField
 		x.OfbField = &field
 		ofpOxmField.Field = &x
 
-		switch voltha.OxmOfbFieldTypes(name) {
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_IN_PORT:
-			field.Value = &voltha.OfpOxmOfbField_Port{
+		switch openflow_13.OxmOfbFieldTypes(name) {
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IN_PORT:
+			field.Value = &openflow_13.OfpOxmOfbField_Port{
 				Port: uint32(val.(ofp.Port)),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_IN_PHY_PORT:
-			field.Value = &voltha.OfpOxmOfbField_PhysicalPort{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IN_PHY_PORT:
+			field.Value = &openflow_13.OfpOxmOfbField_PhysicalPort{
 				PhysicalPort: val.(uint32),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_METADATA:
-			field.Value = &voltha.OfpOxmOfbField_TableMetadata{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_METADATA:
+			field.Value = &openflow_13.OfpOxmOfbField_TableMetadata{
 				TableMetadata: val.(uint64),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_ETH_TYPE:
-			field.Value = &voltha.OfpOxmOfbField_EthType{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ETH_TYPE:
+			field.Value = &openflow_13.OfpOxmOfbField_EthType{
 				EthType: uint32(val.(ofp.EthernetType)),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_IP_PROTO:
-			field.Value = &voltha.OfpOxmOfbField_IpProto{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IP_PROTO:
+			field.Value = &openflow_13.OfpOxmOfbField_IpProto{
 				IpProto: uint32(val.(ofp.IpPrototype)),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_IPV4_DST:
-			field.Value = &voltha.OfpOxmOfbField_Ipv4Dst{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IPV4_DST:
+			field.Value = &openflow_13.OfpOxmOfbField_Ipv4Dst{
 				Ipv4Dst: binary.BigEndian.Uint32(val.(net.IP)),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_ETH_DST:
-			field.Value = &voltha.OfpOxmOfbField_EthDst{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ETH_DST:
+			field.Value = &openflow_13.OfpOxmOfbField_EthDst{
 				EthDst: val.(net.HardwareAddr),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_UDP_SRC:
-			field.Value = &voltha.OfpOxmOfbField_UdpSrc{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_UDP_SRC:
+			field.Value = &openflow_13.OfpOxmOfbField_UdpSrc{
 				UdpSrc: uint32(val.(uint16)),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_UDP_DST:
-			field.Value = &voltha.OfpOxmOfbField_UdpDst{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_UDP_DST:
+			field.Value = &openflow_13.OfpOxmOfbField_UdpDst{
 				UdpDst: uint32(val.(uint16)),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_VLAN_VID:
-			field.Value = &voltha.OfpOxmOfbField_VlanVid{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_VLAN_VID:
+			field.Value = &openflow_13.OfpOxmOfbField_VlanVid{
 				VlanVid: uint32(val.(uint16)),
 			}
-		case voltha.OxmOfbFieldTypes_OFPXMT_OFB_VLAN_PCP:
-			field.Value = &voltha.OfpOxmOfbField_VlanPcp{
+		case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_VLAN_PCP:
+			field.Value = &openflow_13.OfpOxmOfbField_VlanPcp{
 				VlanPcp: uint32(val.(uint8)),
 			}
 		case 200: // voltha-protos doesn't actually have a type for vlan_mask
-			field = voltha.OfpOxmOfbField{Type: voltha.OxmOfbFieldTypes(oxmMap["vlan_vid"])}
+			field = openflow_13.OfpOxmOfbField{Type: openflow_13.OxmOfbFieldTypes(oxmMap["vlan_vid"])}
 			field.HasMask = true
-			ofpOxmField = voltha.OfpOxmField{
+			ofpOxmField = openflow_13.OfpOxmField{
 				OxmClass: ofp.OFPXMCOpenflowBasic,
 				Field:    &openflow_13.OfpOxmField_OfbField{OfbField: &field},
 			}
-			field.Value = &voltha.OfpOxmOfbField_VlanVid{
+			field.Value = &openflow_13.OfpOxmOfbField_VlanVid{
 				VlanVid: uint32(val.(uint16)),
 			}
 			vidMask := val.(uint16)
-			field.Mask = &voltha.OfpOxmOfbField_VlanVidMask{
+			field.Mask = &openflow_13.OfpOxmOfbField_VlanVidMask{
 				VlanVidMask: uint32(vidMask),
 			}
 		}
@@ -449,11 +448,11 @@
 	// Construct request
 	flowUpdate := openflow_13.FlowTableUpdate{
 		Id: ofc.DeviceID,
-		FlowMod: &voltha.OfpFlowMod{
+		FlowMod: &openflow_13.OfpFlowMod{
 			Cookie:      flowDeleteStrict.Cookie,
 			CookieMask:  flowDeleteStrict.CookieMask,
 			TableId:     uint32(flowDeleteStrict.TableId),
-			Command:     voltha.OfpFlowModCommand_OFPFC_DELETE_STRICT,
+			Command:     openflow_13.OfpFlowModCommand_OFPFC_DELETE_STRICT,
 			IdleTimeout: uint32(flowDeleteStrict.IdleTimeout),
 			HardTimeout: uint32(flowDeleteStrict.HardTimeout),
 			Priority:    uint32(flowDeleteStrict.Priority),
@@ -461,8 +460,8 @@
 			OutPort:     uint32(flowDeleteStrict.OutPort),
 			OutGroup:    uint32(flowDeleteStrict.OutGroup),
 			Flags:       uint32(flowDeleteStrict.Flags),
-			Match: &voltha.OfpMatch{
-				Type:      voltha.OfpMatchType(flowDeleteStrict.Match.GetType()),
+			Match: &openflow_13.OfpMatch{
+				Type:      openflow_13.OfpMatchType(flowDeleteStrict.Match.GetType()),
 				OxmFields: oxmList,
 			},
 		},
diff --git a/internal/pkg/openflow/group.go b/internal/pkg/openflow/group.go
index ae45ede..6d55867 100644
--- a/internal/pkg/openflow/group.go
+++ b/internal/pkg/openflow/group.go
@@ -24,7 +24,6 @@
 	ofp "github.com/opencord/goloxi/of13"
 	"github.com/opencord/voltha-lib-go/v7/pkg/log"
 	"github.com/opencord/voltha-protos/v5/go/openflow_13"
-	"github.com/opencord/voltha-protos/v5/go/voltha"
 )
 
 func (ofc *OFConnection) handleGroupMod(ctx context.Context, groupMod ofp.IGroupMod) {
@@ -40,7 +39,7 @@
 
 	groupUpdate := &openflow_13.FlowGroupTableUpdate{
 		Id: ofc.DeviceID,
-		GroupMod: &voltha.OfpGroupMod{
+		GroupMod: &openflow_13.OfpGroupMod{
 			Command: openflowGroupModCommandToVoltha(ctx, groupMod.GetCommand()),
 			Type:    openflowGroupTypeToVoltha(ctx, groupMod.GetGroupType()),
 			GroupId: groupMod.GetGroupId(),
diff --git a/internal/pkg/openflow/packet.go b/internal/pkg/openflow/packet.go
index 7e7b591..b01579e 100644
--- a/internal/pkg/openflow/packet.go
+++ b/internal/pkg/openflow/packet.go
@@ -22,7 +22,7 @@
 
 	ofp "github.com/opencord/goloxi/of13"
 	"github.com/opencord/voltha-lib-go/v7/pkg/log"
-	"github.com/opencord/voltha-protos/v5/go/voltha"
+	"github.com/opencord/voltha-protos/v5/go/openflow_13"
 )
 
 func (ofc *OFConnection) handlePacketOut(ctx context.Context, packetOut *ofp.PacketOut) {
@@ -38,15 +38,15 @@
 	}
 
 	// Collection actions
-	var actions []*voltha.OfpAction
+	var actions []*openflow_13.OfpAction
 	for _, action := range packetOut.GetActions() {
 		actions = append(actions, extractAction(action))
 	}
 
 	// Build packet out
-	pbPacketOut := voltha.PacketOut{
+	pbPacketOut := openflow_13.PacketOut{
 		Id: ofc.DeviceID,
-		PacketOut: &voltha.OfpPacketOut{
+		PacketOut: &openflow_13.OfpPacketOut{
 			BufferId: packetOut.GetBufferId(),
 			InPort:   uint32(packetOut.GetInPort()),
 			Actions:  actions,
diff --git a/internal/pkg/openflow/parseGrpcReturn.go b/internal/pkg/openflow/parseGrpcReturn.go
index 67de283..b6c3ecb 100644
--- a/internal/pkg/openflow/parseGrpcReturn.go
+++ b/internal/pkg/openflow/parseGrpcReturn.go
@@ -37,27 +37,27 @@
 	}
 
 	switch ofbField.Type {
-	case voltha.OxmOfbFieldTypes_OFPXMT_OFB_IN_PORT:
+	case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IN_PORT:
 		ofpInPort := ofp.NewOxmInPort()
 		val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_Port)
 		ofpInPort.Value = ofp.Port(val.Port)
 		return ofpInPort, nil
-	case voltha.OxmOfbFieldTypes_OFPXMT_OFB_ETH_TYPE:
+	case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ETH_TYPE:
 		ofpEthType := ofp.NewOxmEthType()
 		val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_EthType)
 		ofpEthType.Value = ofp.EthernetType(val.EthType)
 		return ofpEthType, nil
-	case voltha.OxmOfbFieldTypes_OFPXMT_OFB_IN_PHY_PORT:
+	case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IN_PHY_PORT:
 		ofpInPhyPort := ofp.NewOxmInPhyPort()
 		val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_PhysicalPort)
 		ofpInPhyPort.Value = ofp.Port(val.PhysicalPort)
 		return ofpInPhyPort, nil
-	case voltha.OxmOfbFieldTypes_OFPXMT_OFB_IP_PROTO:
+	case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IP_PROTO:
 		ofpIpProto := ofp.NewOxmIpProto()
 		val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_IpProto)
 		ofpIpProto.Value = ofp.IpPrototype(val.IpProto)
 		return ofpIpProto, nil
-	case voltha.OxmOfbFieldTypes_OFPXMT_OFB_IPV4_DST:
+	case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IPV4_DST:
 		ofpIpv4Dst := ofp.NewOxmIpv4Dst()
 		val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_Ipv4Dst)
 		buf := new(bytes.Buffer)
@@ -68,17 +68,17 @@
 		}
 		ofpIpv4Dst.Value = buf.Bytes()
 		return ofpIpv4Dst, nil
-	case voltha.OxmOfbFieldTypes_OFPXMT_OFB_UDP_SRC:
+	case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_UDP_SRC:
 		ofpUdpSrc := ofp.NewOxmUdpSrc()
 		val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_UdpSrc)
 		ofpUdpSrc.Value = uint16(val.UdpSrc)
 		return ofpUdpSrc, nil
-	case voltha.OxmOfbFieldTypes_OFPXMT_OFB_UDP_DST:
+	case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_UDP_DST:
 		ofpUdpDst := ofp.NewOxmUdpDst()
 		val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_UdpDst)
 		ofpUdpDst.Value = uint16(val.UdpDst)
 		return ofpUdpDst, nil
-	case voltha.OxmOfbFieldTypes_OFPXMT_OFB_VLAN_VID:
+	case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_VLAN_VID:
 		ofpVlanVid := ofp.NewOxmVlanVid()
 		val := ofbField.GetValue()
 		if val == nil {
@@ -102,18 +102,18 @@
 		}
 		ofpVlanVid.Value = uint16(vlanId.VlanVid) | 0x1000
 		return ofpVlanVid, nil
-	case voltha.OxmOfbFieldTypes_OFPXMT_OFB_METADATA:
+	case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_METADATA:
 		ofpMetadata := ofp.NewOxmMetadata()
 		val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_TableMetadata)
 		ofpMetadata.Value = val.TableMetadata
 		return ofpMetadata, nil
-	case voltha.OxmOfbFieldTypes_OFPXMT_OFB_VLAN_PCP:
+	case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_VLAN_PCP:
 		ofpVlanPcp := ofp.NewOxmVlanPcp()
 		val := ofbField.GetValue()
 		vlanPcp := val.(*openflow_13.OfpOxmOfbField_VlanPcp)
 		ofpVlanPcp.Value = uint8(vlanPcp.VlanPcp)
 		return ofpVlanPcp, nil
-	case voltha.OxmOfbFieldTypes_OFPXMT_OFB_ETH_DST:
+	case openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ETH_DST:
 		ofpEthDst := ofp.NewOxmEthDst()
 		val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_EthDst)
 		ofpEthDst.Value = val.EthDst
