diff --git a/olt-complex.py b/olt-complex.py
index db8f33f..0428f4b 100644
--- a/olt-complex.py
+++ b/olt-complex.py
@@ -64,7 +64,7 @@
         logging.info("Running %s" % self.__class__.__name__)
 
         # Some constants
-        c_vlan_id = 111
+        s_vlan_id = 111
         mcast_vlan_id = 140
         mcast_groups = Thing(
             ch1="230.10.10.10",
@@ -77,7 +77,7 @@
             port=onu_port,
             ip="13.14.14.13",
             mac="b6:b8:3e:fb:1a:3f",
-            s_vlan_id=13
+            c_vlan_id=13
         )
 
         # 0.  Reset the OLT into a clean state
@@ -89,19 +89,19 @@
         self.sendEapolIn()
 
         # 2.  Setup the OLT to pass unicast traffic for the ONU1
-        self.installDoubleTaggingRules(onu1.s_vlan_id, c_vlan_id, self.getCookieBlock())
+        self.installDoubleTaggingRules(s_vlan_id, onu1.c_vlan_id, self.getCookieBlock())
 
         # 3.  Verify that unicast traffic works in both directions (use a few hundred frames in both ways)
-        self.testPacketFlow(onu1.s_vlan_id, c_vlan_id)  # this tests just one packet in each way
-        self.testSustainedPacketFlow(onu1.s_vlan_id, c_vlan_id, 100)
+        self.testPacketFlow(s_vlan_id, onu1.c_vlan_id)  # this tests just one packet in each way
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 100)
 
         # 4.  Setup IGMP forwarding toward the controller
         self.installIgmpRule(self.getCookieBlock())
-        self.testSustainedPacketFlow(onu1.s_vlan_id, c_vlan_id, 10) # to check that unicast still flows
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows
 
         # 5.  Send periodic IGMP queries out toward the ONU and verify its arrival
         self.testIgmpQueryOut()
-        self.testSustainedPacketFlow(onu1.s_vlan_id, c_vlan_id, 10) # to check that unicast still flows
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows
 
         # 6.  Send in an IGMP join request for one channel (specific multicast address) and verify that
         #     the controller receives it.
@@ -116,7 +116,7 @@
         self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port], 10)
 
         # 9.  Verify that bidirectional unicast traffic still works across the PON
-        self.testSustainedPacketFlow(onu1.s_vlan_id, c_vlan_id, 10) # to check that unicast still flows
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows
 
         # 10. Change channel to a new multicast group and verify both multicast receiption as well as
         #     unicast traffic works. This step involves:
@@ -134,7 +134,7 @@
         self.setupMcastChannel(mcast_groups.ch2, mcast_vlan_id, [onu1.port], ch2_group_id, ch2_cookie)
         self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port], expect_to_be_blocked=True)
         self.testMcastFlow(mcast_groups.ch2, mcast_vlan_id, [onu1.port], 10)
-        self.testSustainedPacketFlow(onu1.s_vlan_id, c_vlan_id, 10) # to check that unicast still flows
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows
 
         # 11. Add a second channel while keeping the existing one. Verify all what needs to be verified
         #     (similar as above)
@@ -145,7 +145,7 @@
         self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port], expect_to_be_blocked=True)
         self.testMcastFlow(mcast_groups.ch2, mcast_vlan_id, [onu1.port], 10)
         self.testMcastFlow(mcast_groups.ch3, mcast_vlan_id, [onu1.port], 10)
-        self.testSustainedPacketFlow(onu1.s_vlan_id, c_vlan_id, 10) # to check that unicast still flows
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows
 
         # 12. Add two more multicast channels, and verify everything again
         self.sendIgmpReport(join=[mcast_groups.ch2, mcast_groups.ch3, mcast_groups.ch4, mcast_groups.ch5])
@@ -160,7 +160,7 @@
         self.testMcastFlow(mcast_groups.ch3, mcast_vlan_id, [onu1.port], 10)
         self.testMcastFlow(mcast_groups.ch4, mcast_vlan_id, [onu1.port], 10)
         self.testMcastFlow(mcast_groups.ch5, mcast_vlan_id, [onu1.port], 10)
-        self.testSustainedPacketFlow(onu1.s_vlan_id, c_vlan_id, 10) # to check that unicast still flows
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows
 
         # 13. Flip a channel for one of the multicast channels, and verify everything (ch3 -> ch1)
         self.sendIgmpReport(join=[mcast_groups.ch1, mcast_groups.ch2, mcast_groups.ch4, mcast_groups.ch5],
@@ -173,7 +173,7 @@
         self.testMcastFlow(mcast_groups.ch3, mcast_vlan_id, [onu1.port], expect_to_be_blocked=True)
         self.testMcastFlow(mcast_groups.ch4, mcast_vlan_id, [onu1.port], 10)
         self.testMcastFlow(mcast_groups.ch5, mcast_vlan_id, [onu1.port], 10)
-        self.testSustainedPacketFlow(onu1.s_vlan_id, c_vlan_id, 10) # to check that unicast still flows
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows
 
         # 14. Tear down the test.
         self.resetOlt()
@@ -243,4 +243,187 @@
 
     """
 
-    # TODO
\ No newline at end of file
+    def runTest(self):
+        logging.info("Running %s" % self.__class__.__name__)
+
+        # Some constants
+        s_vlan_id = 111
+        mcast_vlan_id = 140
+        mcast_groups = Thing(
+            ch1="230.10.10.10",
+            ch2="231.11.11.11",
+            ch3="232.12.12.12",
+            ch4="233.13.13.13",
+            ch5="234.14.14.14"
+        )
+        onu1 = Thing(
+            port=onu_port,
+            ip="13.14.14.13",
+            mac="b6:b8:3e:fb:1a:3f",
+            c_vlan_id=13
+        )
+        onu2 = Thing(
+            port=onu_port2,
+            ip="113.114.114.113",
+            mac="b6:b8:3e:fb:aa:aa",
+            c_vlan_id=913
+        )
+
+        # 0.  Reset the OLT into a clean state
+        self.resetOlt()
+
+        # 1.  Setup the OLT to pass authentication (EAPOL) to controller from ONU1
+        #     and test it.
+        self.installEapolRule()
+        self.sendEapolIn()
+
+        # 2.  Setup the OLT to pass unicast traffic for the ONU1
+        self.installDoubleTaggingRules(s_vlan_id, onu1.c_vlan_id, self.getCookieBlock())
+
+        # 3.  Verify that unicast traffic works in both directions (use a few hundred frames in both ways)
+        self.testPacketFlow(s_vlan_id, onu1.c_vlan_id)  # this tests just one packet in each way
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 100)
+
+        # 4.  Setup IGMP forwarding toward the controller
+        self.installIgmpRule(self.getCookieBlock())
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows
+
+        # 5.  Send periodic IGMP queries out toward the ONU1 and verify its arrival
+        self.testIgmpQueryOut()
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows
+
+        # 6.  Send in an IGMP join request for one channel (specific multicast address) and verify that
+        #     the controller receives it.
+        self.sendIgmpReport(join=[mcast_groups.ch1])
+
+        # 7.  Setup flows for forwarding multicast traffic from the OLT port toward ONU1
+        ch1_cookie = self.getCookieBlock()
+        ch1_group_id = 1
+        self.setupMcastChannel(mcast_groups.ch1, mcast_vlan_id, [onu1.port], ch1_group_id, ch1_cookie)
+
+        # 8.  Verify that multicast packets can reach ONU1
+        self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port], 10)
+
+        # 9.  Verify that bidirectional unicast traffic still works across the PON
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows
+
+        # 10. Change channel to a new multicast group and verify both multicast receiption as well as
+        #     unicast traffic works. This step involves:
+        #     - sending a leave message by the ONU to the controller and verify its reception
+        #     - sending a join message and verify its reception
+        #     - removing the existing multicast flow
+        #     - adding a new multicast flow
+        #     - verify that original flow no longer flows
+        #     - verify new flow
+        #     - verify that unicast still works
+        self.sendIgmpReport(leave=[mcast_groups.ch1], join=[mcast_groups.ch2])
+        self.removeMcastChannel(mcast_groups.ch1, mcast_vlan_id, [onu1.port], ch1_group_id, ch1_cookie)
+        ch2_cookie = self.getCookieBlock()
+        ch2_group_id = 2
+        self.setupMcastChannel(mcast_groups.ch2, mcast_vlan_id, [onu1.port], ch2_group_id, ch2_cookie)
+        self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port], expect_to_be_blocked=True)
+        self.testMcastFlow(mcast_groups.ch2, mcast_vlan_id, [onu1.port], 10)
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows
+
+        # 11. Add a second channel while keeping the existing one. Verify all what needs to be verified
+        #     (similar as above) - at this point ONU1 is tuned into ch2 and ch3
+        self.sendIgmpReport(join=[mcast_groups.ch2, mcast_groups.ch3])
+        ch3_cookie = self.getCookieBlock()
+        ch3_group_id = 3
+        self.setupMcastChannel(mcast_groups.ch3, mcast_vlan_id, [onu1.port], ch3_group_id, ch3_cookie)
+        self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port], expect_to_be_blocked=True)
+        self.testMcastFlow(mcast_groups.ch2, mcast_vlan_id, [onu1.port], 10)
+        self.testMcastFlow(mcast_groups.ch3, mcast_vlan_id, [onu1.port], 10)
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows
+
+        # 12. Setup the OLT to pass authentication (EAPOL) to controller from ONU2
+        #     and test it.
+        self.installEapolRule(onu_port2)
+        self.sendEapolIn(onu_port2)
+
+        # 13. Setup the OLT to pass unicast traffic for the ONU2
+        self.installDoubleTaggingRules(s_vlan_id, onu2.c_vlan_id, self.getCookieBlock(), onu_port2)
+
+        # 14. Verify that unicast traffic works in both directions (use a few hundred frames in both ways)
+        self.testPacketFlow(s_vlan_id, onu2.c_vlan_id, onu_port2)  # this tests just one packet in each way
+        self.testSustainedPacketFlow(s_vlan_id, onu2.c_vlan_id, 100, onu=onu_port2)
+
+        # 15. Verify that both ONU1 can send/receive unicast and ONU1 can still see its 2 channels
+        self.testMcastFlow(mcast_groups.ch2, mcast_vlan_id, [onu1.port], 10)
+        self.testMcastFlow(mcast_groups.ch3, mcast_vlan_id, [onu1.port], 10)
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows
+
+        # 16. Setup IGMP forwarding toward the controller
+        # Note: this is actually not needed since the rule is not port specific - maybe it should be?
+        #self.installIgmpRule(self.getCookieBlock())
+        #self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows
+
+        # 17. Send periodic IGMP queries out toward the ONU2 and verify its arrival
+        self.testIgmpQueryOut(onu_port2)
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10) # to check that unicast still flows
+        self.testSustainedPacketFlow(s_vlan_id, onu2.c_vlan_id, 10, onu=onu_port2) # to check that unicast still flows
+
+        # 18. Send in an IGMP join request for one channel (specific multicast address) and verify that
+        #     the controller receives it.
+        self.sendIgmpReport(join=[mcast_groups.ch1], onu=onu_port2)
+
+        # 19. Setup flows for forwarding multicast traffic from the OLT port toward ONU2: ch1
+        self.setupMcastChannel(mcast_groups.ch1, mcast_vlan_id, [onu2.port], ch1_group_id, ch1_cookie)
+
+        # 20. Verify that ch1 multicast packets can reach ONU2, but not ONU1
+        self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu2.port], 10)
+        self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port], expect_to_be_blocked=True)
+
+        # 21. Verify that bidirectional unicast traffic still works across the PON for both ONUs
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id, 10)
+        self.testSustainedPacketFlow(s_vlan_id, onu2.c_vlan_id, 10, onu=onu_port2)
+
+        # 22. Change channel to a new multicast group and verify both multicast receiption as well as
+        #     unicast traffic works. This step involves:
+        #     - sending a leave message by the ONU to the controller and verify its reception
+        #     - sending a join message and verify its reception
+        #     - removing the existing multicast flow
+        #     - adding a new multicast flow
+        #     - verify that original flow no longer flows
+        #     - verify new flow
+        #     - verify that unicast still works
+        #     - verify everything for ONU1 too
+        self.sendIgmpReport(join=[mcast_groups.ch2], leave=[mcast_groups.ch1], onu=onu2.port)
+        self.removeMcastChannel(mcast_groups.ch1, mcast_vlan_id, [onu2.port], ch1_group_id, ch1_cookie)
+        self.updateMcastChannel(ch2_group_id, port_list=[onu1.port, onu2.port])
+        self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port, onu2.port], expect_to_be_blocked=True)
+        self.testMcastFlow(mcast_groups.ch2, mcast_vlan_id, [onu1.port, onu2.port])
+        self.testMcastFlow(mcast_groups.ch3, mcast_vlan_id, [onu1.port])
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id)
+        self.testSustainedPacketFlow(s_vlan_id, onu2.c_vlan_id, onu=onu_port2)
+
+        # 23. Add a second channel for ONU2 while keeping the existing one. Verify all what needs to be verified
+        #     (similar as above) - at this point ONU1 is tuned into ch2 and ch3 and ONU2 is
+        #     tuned to ch2 and ch5
+        self.sendIgmpReport(join=[mcast_groups.ch2, mcast_groups.ch5], onu=onu2.port)
+        ch5_cookie = self.getCookieBlock()
+        ch5_group_id = 5
+        self.setupMcastChannel(mcast_groups.ch5, mcast_vlan_id, [onu2.port], ch5_group_id, ch5_cookie)
+        self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port, onu2.port], expect_to_be_blocked=True)
+        self.testMcastFlow(mcast_groups.ch2, mcast_vlan_id, [onu1.port, onu2.port])
+        self.testMcastFlow(mcast_groups.ch3, mcast_vlan_id, [onu1.port])
+        self.testMcastFlow(mcast_groups.ch5, mcast_vlan_id, [onu2.port])
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id)
+        self.testSustainedPacketFlow(s_vlan_id, onu2.c_vlan_id, onu=onu_port2)
+
+        # 24. Flip a channel for ONU1 and verify everything (ch3 -> ch4)
+        self.sendIgmpReport(leave=[mcast_groups.ch3], join=[mcast_groups.ch2, mcast_groups.ch4], onu=onu1.port)
+        self.removeMcastChannel(mcast_groups.ch3, mcast_vlan_id, [onu1.port], ch3_group_id, ch3_cookie)
+        ch4_cookie = self.getCookieBlock()
+        ch4_group_id = 4
+        self.setupMcastChannel(mcast_groups.ch4, mcast_vlan_id, [onu1.port], ch4_group_id, ch4_cookie)
+        self.testMcastFlow(mcast_groups.ch1, mcast_vlan_id, [onu1.port, onu2.port], expect_to_be_blocked=True)
+        self.testMcastFlow(mcast_groups.ch2, mcast_vlan_id, [onu1.port, onu2.port])
+        self.testMcastFlow(mcast_groups.ch3, mcast_vlan_id, [onu1.port, onu2.port], expect_to_be_blocked=True)
+        self.testMcastFlow(mcast_groups.ch4, mcast_vlan_id, [onu1.port])
+        self.testMcastFlow(mcast_groups.ch5, mcast_vlan_id, [onu2.port])
+        self.testSustainedPacketFlow(s_vlan_id, onu1.c_vlan_id)
+        self.testSustainedPacketFlow(s_vlan_id, onu2.c_vlan_id, onu=onu_port2)
+
+        # 25. Tear down the test.
+        self.resetOlt()
diff --git a/oltbase.py b/oltbase.py
index 2baf37c..5797005 100644
--- a/oltbase.py
+++ b/oltbase.py
@@ -150,7 +150,7 @@
             print "pkt # %d" % (i+1,)
             self.testPacketFlow(s_vlan_id, c_vlan_id, onu=onu, verify_blocked_flows=False)
 
-    def installDoubleTaggingRules(self, s_vlan_id, c_vlan_id, cookie=42, onu = None):
+    def installDoubleTaggingRules(self, s_vlan_id, c_vlan_id, cookie=42, onu=None):
 
         inport = onu_port if onu is None else onu
 
@@ -443,6 +443,30 @@
         do_barrier(self.controller)
         verify_no_errors(self.controller)
 
+    def updateMcastChannel(self, group_id, port_list):
+        """Modify the group port list by adding/removing ports"""
+
+        buckets = [
+            ofp.common.bucket(
+                watch_port=ofp.OFPP_ANY,
+                watch_group=ofp.OFPG_ANY,
+                actions=[
+                    ofp.action.pop_vlan(),
+                    ofp.action.output(port=port)
+                ])
+            for port in port_list
+        ]
+
+        msg = ofp.message.group_mod(
+            command=ofp.OFPGC_MODIFY,
+            group_type=ofp.OFPGT_ALL,
+            group_id=group_id,
+            buckets=buckets)
+
+        self.controller.message_send(msg)
+        do_barrier(self.controller)
+        verify_no_errors(self.controller)
+
     def ip2int(self, ip):
         """Convert a dot-notated string IP address"""
         digits = [int(d) for d in ip.split('.')]
