bool type_match = IcmpPayloadHeader.get_type() == type ? true : false;
     bool identifier_match = IcmpPayloadHeader.get_identifier() == identifier ? true: false;
     bool seq_num_match = IcmpPayloadHeader.get_sequence_number() == sequence_number ? true : false;
+#ifdef IPV6_DATA_PRESENT_IN_ISTREAM
+    // TODO operator>> does not read IpHeader, thus this object is not initialized
+    // must check why IPv6 data does not come in the istream like IPv4 data
     bool address_match = IpHeader.get_source_address() == source_address ? true : false;
 
     return ( type_match && identifier_match && seq_num_match && address_match );
+#else
+    return ( type_match && identifier_match && seq_num_match );
+#endif
 }
 
 /**
         Icmpv6Packet &packet
 )
 {
+#ifdef IPV6_DATA_PRESENT_IN_ISTREAM
     //TODO WHY IPv6 does not come like IPv4????
-    //is >> packet.IpHeader >> packet.IcmpPayloadHeader >> packet.IcmpPayloadData;
+    is >> packet.IpHeader >> packet.IcmpPayloadHeader >> packet.IcmpPayloadData;
+#else
     is >> packet.IcmpPayloadHeader >> packet.IcmpPayloadData;
+#endif
 
     return is;
 }