diff --git a/grpc/packetIn.go b/grpc/packetIn.go
index 938dabe..8200a37 100644
--- a/grpc/packetIn.go
+++ b/grpc/packetIn.go
@@ -18,10 +18,12 @@
 
 import (
 	"context"
+	"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/voltha-protos/go/openflow_13"
 	pb "github.com/opencord/voltha-protos/go/voltha"
-	ofp "github.com/skydive-project/goloxi/of13"
 	"google.golang.org/grpc"
 	"log"
 )
@@ -39,33 +41,89 @@
 		if err != nil {
 			log.Fatalf("error on stream.Rec %v", err)
 		}
+		deviceID := packet.GetId()
 		ofPacketIn := ofp.NewPacketIn()
 		ofPacketIn.SetVersion(uint8(4))
 		ofPacketIn.SetXid(openflow.GetXid())
 		ofPacketIn.SetBufferId(packetIn.GetBufferId())
 		ofPacketIn.SetCookie(packetIn.GetCookie())
 		ofPacketIn.SetData(packetIn.GetData())
-		var outMatch ofp.Match
+		match := ofp.NewMatchV3()
 		inMatch := packetIn.GetMatch()
-		outMatch.SetType(uint16(inMatch.GetType()))
-		/*
-			TODO not sure if anything further is needed
-			fields := inMatch.GetOxmFields()
-			var outFields []ofp.Oxm
-			for i:=0;i< len(fields);i++{
-				field := fields[i]
-				outField := ofp.Oxm{}
-				outField.SetTypeLen(field.OxmClass.)
-				outField.SetTypeLen(field)
-			}
-			outMatch.SetOxmList(inMatch.GetOxmFields())
-		*/
+		match.SetType(uint16(inMatch.GetType()))
+		oxFields := inMatch.GetOxmFields()
+		var fields []goloxi.IOxm
+		var size uint16
+		size = 4
+		for i := 0; i < len(oxFields); i++ {
+			oxmField := oxFields[i]
+			field := oxmField.GetField()
+			ofbField := field.(*openflow_13.OfpOxmField_OfbField).OfbField
+			size += 4 //header for oxm
+			switch ofbField.Type {
+			case pb.OxmOfbFieldTypes_OFPXMT_OFB_IN_PORT:
+				ofpInPort := ofp.NewOxmInPort()
+				val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_Port)
+				ofpInPort.Value = ofp.Port(val.Port)
+				size += 4
+				fields = append(fields, ofpInPort)
+			case pb.OxmOfbFieldTypes_OFPXMT_OFB_ETH_TYPE:
+				ofpEthType := ofp.NewOxmEthType()
+				val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_EthType)
+				ofpEthType.Value = ofp.EthernetType(val.EthType)
+				size += 2
+				fields = append(fields, ofpEthType)
+			case pb.OxmOfbFieldTypes_OFPXMT_OFB_IN_PHY_PORT:
+				ofpInPhyPort := ofp.NewOxmInPhyPort()
+				val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_PhysicalPort)
+				ofpInPhyPort.Value = ofp.Port(val.PhysicalPort)
+				size += 4
+				fields = append(fields, ofpInPhyPort)
+			case pb.OxmOfbFieldTypes_OFPXMT_OFB_IP_PROTO:
+				ofpIpProto := ofp.NewOxmIpProto()
+				val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_IpProto)
+				ofpIpProto.Value = ofp.IpPrototype(val.IpProto)
+				size += 1
+				fields = append(fields, ofpIpProto)
+			case pb.OxmOfbFieldTypes_OFPXMT_OFB_UDP_SRC:
+				ofpUdpSrc := ofp.NewOxmUdpSrc()
+				val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_UdpSrc)
+				ofpUdpSrc.Value = uint16(val.UdpSrc)
+				size += 2
+				fields = append(fields, ofpUdpSrc)
+			case pb.OxmOfbFieldTypes_OFPXMT_OFB_UDP_DST:
+				ofpUdpDst := ofp.NewOxmUdpDst()
+				val := ofbField.GetValue().(*openflow_13.OfpOxmOfbField_UdpDst)
+				ofpUdpDst.Value = uint16(val.UdpDst)
+				size += 2
+				fields = append(fields, ofpUdpDst)
+			case pb.OxmOfbFieldTypes_OFPXMT_OFB_VLAN_VID:
+				ofpVlanVid := ofp.NewOxmVlanVid()
+				val := ofbField.GetValue()
+				if val != nil {
+					vlanId := val.(*openflow_13.OfpOxmOfbField_VlanVid)
+					ofpVlanVid.Value = uint16(vlanId.VlanVid) + 0x1000
+					size += 2
+				} else {
+					ofpVlanVid.Value = uint16(0)
+				}
 
-		ofPacketIn.SetMatch(outMatch)
+				fields = append(fields, ofpVlanVid)
+			default:
+				log.Printf("handleFlowStatsRequest   Unhandled OxmField %v", ofbField.Type)
+			}
+		}
+		match.SetLength(size)
+
+		match.SetOxmList(fields)
+
+		ofPacketIn.SetMatch(*match)
 		ofPacketIn.SetReason(uint8(packetIn.GetReason()))
 		ofPacketIn.SetTableId(uint8(packetIn.GetTableId()))
 		ofPacketIn.SetTotalLen(uint16(len(ofPacketIn.GetData())))
-		//ofPacketIn.
+		openFlowClient := GetClient(deviceID)
+		openFlowClient.SendMessage(ofPacketIn)
+
 	}
 
 }
