diff --git a/tools/test/p4src/p4-16/ecmp.p4 b/tools/test/p4src/p4-16/ecmp.p4
index 6b3e73e..3c06c20 100644
--- a/tools/test/p4src/p4-16/ecmp.p4
+++ b/tools/test/p4src/p4-16/ecmp.p4
@@ -6,15 +6,20 @@
 #include "include/port_counters.p4"
 #include "include/checksums.p4"
 #include "include/actions.p4"
+#include "include/packet_io.p4"
 
 
-control ingress(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) {
+control ingress(inout headers_t hdr, inout metadata_t meta, inout standard_metadata_t standard_metadata) {
+
     direct_counter(CounterType.packets) ecmp_group_table_counter;
     direct_counter(CounterType.packets) table0_counter;
 
-    action ecmp_group(GroupId groupId, GroupSize groupSize) {
-        meta.ecmp_metadata.groupId = groupId;
-        hash(meta.ecmp_metadata.selector, HashAlgorithm.crc16, (bit<64>)0, { hdr.ipv4.srcAddr, hdr.ipv4.dstAddr, hdr.ipv4.protocol, hdr.tcp.srcPort, hdr.tcp.dstPort, hdr.udp.srcPort, hdr.udp.dstPort }, (bit<128>)groupSize);
+    action ecmp_group(group_id_t group_id, group_size_t groupSize) {
+        meta.ecmp_metadata.group_id = group_id;
+        hash(meta.ecmp_metadata.selector, HashAlgorithm.crc16, (bit<64>)0,
+        { hdr.ipv4.srcAddr, hdr.ipv4.dstAddr, hdr.ipv4.protocol, hdr.tcp.srcPort, hdr.tcp.dstPort, hdr.udp.srcPort,
+            hdr.udp.dstPort },
+        (bit<128>)groupSize);
     }
 
     table ecmp_group_table {
@@ -22,7 +27,7 @@
             set_egress_port(standard_metadata);
         }
         key = {
-            meta.ecmp_metadata.groupId : exact;
+            meta.ecmp_metadata.group_id : exact;
             meta.ecmp_metadata.selector: exact;
         }
         counters = ecmp_group_table_counter;
@@ -44,21 +49,28 @@
         }
         counters = table0_counter;
     }
+
     PortCountersControl() port_counters_control;
+    PacketIoIngressControl() packet_io_ingress_control;
+
     apply {
-        switch (table0.apply().action_run) {
-            ecmp_group: {
-                ecmp_group_table.apply();
+        packet_io_ingress_control.apply(hdr, standard_metadata);
+        if (!hdr.packet_out.isValid()) {
+            switch (table0.apply().action_run) {
+                ecmp_group: {
+                    ecmp_group_table.apply();
+                }
             }
         }
-
         port_counters_control.apply(hdr, meta, standard_metadata);
     }
 }
 
-control egress(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) {
+control egress(inout headers_t hdr, inout metadata_t meta, inout standard_metadata_t standard_metadata) {
+
+    PacketIoEgressControl() packet_io_egress_control;
     apply {
-        // Nothing to do
+        packet_io_egress_control.apply(hdr, standard_metadata);
     }
 }
 
