diff --git a/internal/bbsim/api/onus_handler.go b/internal/bbsim/api/onus_handler.go
index 7ec4ab3..2c16872 100644
--- a/internal/bbsim/api/onus_handler.go
+++ b/internal/bbsim/api/onus_handler.go
@@ -209,6 +209,8 @@
 			event = "igmp_join_start"
 		case bbsim.SubActionTypes_LEAVE:
 			event = "igmp_leave"
+                case bbsim.SubActionTypes_JOINV3:
+                        event = "igmp_join_startv3"
 		}
 
 		if igmpErr := onu.InternalState.Event(event); igmpErr != nil {
diff --git a/internal/bbsim/devices/messageTypes.go b/internal/bbsim/devices/messageTypes.go
index 94c0731..31a09c5 100644
--- a/internal/bbsim/devices/messageTypes.go
+++ b/internal/bbsim/devices/messageTypes.go
@@ -48,6 +48,7 @@
 	IGMPLeaveGroup         MessageType = 16 // Leave Group
 
 	AlarmIndication MessageType = 17 // message data is an openolt.AlarmIndication
+        IGMPMembershipReportV3 MessageType = 18// Version 3 Membership Report
 )
 
 func (m MessageType) String() string {
@@ -69,6 +70,7 @@
 		"OnuPacketIn",
 		"IGMPMembershipReportV2",
 		"IGMPLeaveGroup",
+                "IGMPMembershipReportV3",
 	}
 	return names[m]
 }
diff --git a/internal/bbsim/devices/onu.go b/internal/bbsim/devices/onu.go
index a45ec8a..3415083 100644
--- a/internal/bbsim/devices/onu.go
+++ b/internal/bbsim/devices/onu.go
@@ -143,6 +143,7 @@
 			{Name: "send_dhcp_flow", Src: []string{"eapol_flow_sent"}, Dst: "dhcp_flow_sent"},
 			// IGMP
 			{Name: "igmp_join_start", Src: []string{"eap_response_success_received", "gem_port_added", "eapol_flow_received", "dhcp_ack_received", "igmp_left", "igmp_join_error"}, Dst: "igmp_join_started"},
+			{Name: "igmp_join_startv3", Src: []string{"eap_response_success_received", "gem_port_added", "eapol_flow_received", "dhcp_ack_received", "igmp_left", "igmp_join_error"}, Dst: "igmp_join_started"},
 			{Name: "igmp_join_error", Src: []string{"igmp_join_started"}, Dst: "igmp_join_error"},
 			{Name: "igmp_leave", Src: []string{"igmp_join_started", "gem_port_added", "eapol_flow_received", "eap_response_success_received", "dhcp_ack_received"}, Dst: "igmp_left"},
 		},
@@ -255,6 +256,12 @@
 					Type: IGMPLeaveGroup}
 				o.Channel <- msg
 			},
+                        "igmp_join_startv3": func(e *fsm.Event) {
+                                msg := Message{
+                                        Type: IGMPMembershipReportV3,
+                                }
+                                o.Channel <- msg
+                        },
 		},
 	)
 
@@ -372,6 +379,9 @@
 			case IGMPLeaveGroup:
 				log.Infof("Recieved IGMPLeaveGroupV2 message on ONU channel")
 				igmp.SendIGMPLeaveGroupV2(o.PonPortID, o.ID, o.Sn(), o.PortNo, o.HwAddress, stream)
+                        case IGMPMembershipReportV3:
+                                log.Infof("Recieved IGMPMembershipReportV3 message on ONU channel")
+                                igmp.SendIGMPMembershipReportV3(o.PonPortID, o.ID, o.Sn(), o.PortNo, o.HwAddress, stream)
 			default:
 				onuLogger.Warnf("Received unknown message data %v for type %v in OLT Channel", message.Data, message.Type)
 			}
diff --git a/internal/bbsim/responders/igmp/igmp.go b/internal/bbsim/responders/igmp/igmp.go
index e5c1ad2..a57810e 100644
--- a/internal/bbsim/responders/igmp/igmp.go
+++ b/internal/bbsim/responders/igmp/igmp.go
@@ -127,6 +127,89 @@
 	return nil
 }
 
+func SendIGMPMembershipReportV3(ponPortId uint32, onuId uint32, serialNumber string, portNo uint32, macAddress net.HardwareAddr, stream bbsim.Stream) error {
+       log.WithFields(log.Fields{
+               "OnuId": onuId,
+               "SerialNumber": serialNumber,
+               "PortNo": portNo,
+    }).Debugf("Entered SendIGMPMembershipReportV3")
+    igmp := createIGMPV3MembershipReportPacket()
+       pkt, err := serializeIgmpPacket(ponPortId, onuId, macAddress, igmp)
+
+       if err != nil {
+               log.WithFields(log.Fields{
+                        "OnuId":  onuId,
+                        "IntfId": ponPortId,
+                        "SerialNumber": serialNumber,
+                }).Errorf("Seriliazation of igmp packet failed :  %s", err)
+                return err
+       }
+
+       gemid, err := omci.GetGemPortId(ponPortId, onuId)
+       if err != nil {
+               log.WithFields(log.Fields{
+                       "OnuId":  onuId,
+                       "IntfId": ponPortId,
+                        "SerialNumber": serialNumber,
+               }).Errorf("Can't retrieve GemPortId for IGMP: %s", err)
+               return err
+       }
+
+       data := &openolt.Indication_PktInd{
+               PktInd: &openolt.PacketIndication{
+                       IntfType:  "pon",
+                       IntfId:    ponPortId,
+                       GemportId: uint32(gemid),
+                       Pkt:       pkt,
+                       PortNo:    portNo,
+               },
+       }
+        //Sending IGMP packets
+        if err := stream.Send(&openolt.Indication{Data: data}); err != nil {
+                log.Errorf("Fail to send IGMP PktInd indication for ONU: %s, IntfId: %s, SerialNumber: %s,  error: %v", onuId, ponPortId, serialNumber, err)
+                return err
+        }
+        return nil
+}
+
+func createIGMPV3MembershipReportPacket() IGMP {
+
+       groupRecord1:= IGMPv3GroupRecord{
+           Type:             IGMPv3GroupRecordType(IGMPIsIn),
+           AuxDataLen:       0, // this should always be 0 as per IGMPv3 spec.
+           NumberOfSources:  3,
+           MulticastAddress: net.IPv4(224, 0, 0, 22),
+           SourceAddresses:  []net.IP{net.IPv4(15, 14, 20, 24), net.IPv4(15, 14, 20, 26), net.IPv4(15, 14, 20, 25)},
+           AuxData:          0, // NOT USED
+       }
+
+       groupRecord2:= IGMPv3GroupRecord{
+           Type:             IGMPv3GroupRecordType(IGMPIsIn),
+           AuxDataLen:       0, // this should always be 0 as per IGMPv3 spec.
+           NumberOfSources:  2,
+           MulticastAddress: net.IPv4(224, 0, 0, 25),
+           SourceAddresses:  []net.IP{net.IPv4(15, 14, 20, 30), net.IPv4(15, 14, 20, 31)},
+           AuxData:          0, // NOT USED
+       }
+
+       igmpDefault := IGMP{
+               Type:                    0x22, //IGMPV3 Membership Report
+               MaxResponseTime:         time.Duration(1),
+               Checksum:                0,
+               GroupAddress:            net.IPv4(224, 0, 0, 22),
+               SupressRouterProcessing: false,
+               RobustnessValue:         0,
+               IntervalTime:            time.Duration(1),
+               SourceAddresses:         []net.IP{net.IPv4(224, 0, 0, 24)},
+               NumberOfGroupRecords:    2,
+               NumberOfSources:         1,
+               GroupRecords:            []IGMPv3GroupRecord{groupRecord1, groupRecord2},
+               Version:                 3,
+       }
+
+       return igmpDefault
+}
+
 //func serializeIgmpPacket(intfId uint32, onuId uint32, srcMac net.HardwareAddr, igmp *layers.IGMP) ([]byte, error) {
 func createIGMPV2MembershipReportPacket() IGMP {
 	return IGMP{
@@ -207,34 +290,96 @@
 	SourceAddresses         []net.IP
 	NumberOfGroupRecords    uint16
 	NumberOfSources         uint16
+        GroupRecords            []IGMPv3GroupRecord
 	Version                 uint8 // IGMP protocol version
 }
 
+// IGMPv3GroupRecord stores individual group records for a V3 Membership Report message.
+type IGMPv3GroupRecord struct {
+       Type             IGMPv3GroupRecordType
+       AuxDataLen       uint8 // this should always be 0 as per IGMPv3 spec.
+       NumberOfSources  uint16
+       MulticastAddress net.IP
+       SourceAddresses  []net.IP
+       AuxData          uint32 // NOT USED
+}
+
+type IGMPv3GroupRecordType uint8
+
+const (
+       IGMPIsIn  IGMPv3GroupRecordType = 0x01 // Type MODE_IS_INCLUDE, source addresses x
+       IGMPIsEx  IGMPv3GroupRecordType = 0x02 // Type MODE_IS_EXCLUDE, source addresses x
+       IGMPToIn  IGMPv3GroupRecordType = 0x03 // Type CHANGE_TO_INCLUDE_MODE, source addresses x
+       IGMPToEx  IGMPv3GroupRecordType = 0x04 // Type CHANGE_TO_EXCLUDE_MODE, source addresses x
+       IGMPAllow IGMPv3GroupRecordType = 0x05 // Type ALLOW_NEW_SOURCES, source addresses x
+       IGMPBlock IGMPv3GroupRecordType = 0x06 // Type BLOCK_OLD_SOURCES, source addresses x
+)
+
+func (i IGMPv3GroupRecordType) String() string {
+       switch i {
+       case IGMPIsIn:
+               return "MODE_IS_INCLUDE"
+       case IGMPIsEx:
+               return "MODE_IS_EXCLUDE"
+       case IGMPToIn:
+               return "CHANGE_TO_INCLUDE_MODE"
+       case IGMPToEx:
+               return "CHANGE_TO_EXCLUDE_MODE"
+       case IGMPAllow:
+               return "ALLOW_NEW_SOURCES"
+       case IGMPBlock:
+               return "BLOCK_OLD_SOURCES"
+       default:
+               return ""
+       }
+}
+
 // SerializeTo writes the serialized form of this layer into the
 // SerializationBuffer, implementing gopacket.SerializableLayer.
 // See the docs for gopacket.SerializableLayer for more info.
-// SerializeTo writes the serialized form of this layer into the
-// SerializationBuffer, implementing gopacket.SerializableLayer.
-// See the docs for gopacket.SerializableLayer for more info.
 func (igmp IGMP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
-	//	func (igmp *IGMP) SerializeTo(b gopacket.SerializeBuffer, opts gopacket.SerializeOptions) error {
-	log.Debugf("Serializing IGMP Packet")
-	//TODO - add  length check here
+        log.Debugf("Serializing IGMP Packet")
 	data, err := b.PrependBytes(8915)
-	if err != nil {
-		return err
-	}
+        if err != nil {
+                return err
+        }
+        if igmp.Version == 2 {
+                data[0] = byte(igmp.Type)
+                data[1] = byte(igmp.MaxResponseTime)
+                data[2] = 0
+                data[3] = 0
+                copy(data[4:8], igmp.GroupAddress.To4())
+                if opts.ComputeChecksums {
+                        igmp.Checksum = tcpipChecksum(data, 0)
+                        binary.BigEndian.PutUint16(data[2:4], igmp.Checksum)
+                }
+        } else if igmp.Version ==3{
 
-	data[0] = byte(igmp.Type)
-	data[1] = byte(igmp.MaxResponseTime)
-	data[2] = 0
-	data[3] = 0
-	copy(data[4:8], igmp.GroupAddress.To4())
-	if opts.ComputeChecksums {
-		igmp.Checksum = tcpipChecksum(data, 0)
-		binary.BigEndian.PutUint16(data[2:4], igmp.Checksum)
-	}
-	return nil
+                data[0] = byte(igmp.Type)
+                data[1] = 0
+                data[2] = 0
+                data[3] = 0
+                data[4] = 0
+                data[5] = 0
+                binary.BigEndian.PutUint16(data[6:8], igmp.NumberOfGroupRecords)
+                j := 8
+                for i := uint16(0); i < igmp.NumberOfGroupRecords; i++ {
+                        data[j] = byte(igmp.GroupRecords[i].Type)
+                        data[j+1] = byte(0)
+                        binary.BigEndian.PutUint16(data[j+2:j+4], igmp.GroupRecords[i].NumberOfSources)
+                        copy(data[j+4:j+8], igmp.GroupRecords[i].MulticastAddress.To4())
+                        j=j+8
+                        for m := uint16(0); m < igmp.GroupRecords[i].NumberOfSources; m++ {
+                                copy(data[j:(j+4)], igmp.GroupRecords[i].SourceAddresses[m].To4())
+                                j=j+4
+                        }
+                }
+                if opts.ComputeChecksums {
+                        igmp.Checksum = tcpipChecksum(data, 0)
+                        binary.BigEndian.PutUint16(data[2:4], igmp.Checksum)
+                }
+        }
+        return nil
 }
 
 // Calculate the TCP/IP checksum defined in rfc1071.  The passed-in csum is any
diff --git a/internal/bbsimctl/commands/onu.go b/internal/bbsimctl/commands/onu.go
index 515ba07..fec47ed 100644
--- a/internal/bbsimctl/commands/onu.go
+++ b/internal/bbsimctl/commands/onu.go
@@ -39,6 +39,7 @@
 
 const IgmpJoinKey string = "join"
 const IgmpLeaveKey string = "leave"
+const IgmpJoinKeyV3 string = "joinv3"
 
 type ONUList struct{}
 
@@ -257,7 +258,9 @@
 		subActionVal = pb.SubActionTypes_JOIN
 	} else if string(options.Args.SubAction) == IgmpLeaveKey {
 		subActionVal = pb.SubActionTypes_LEAVE
-	}
+        } else if string(options.Args.SubAction) == IgmpJoinKeyV3 {
+                subActionVal = pb.SubActionTypes_JOINV3
+        }
 
 	igmpReq := pb.IgmpRequest{
 		OnuReq:       &req,
