diff --git a/voltha/adapters/ponsim_olt/ponsim_olt.py b/voltha/adapters/ponsim_olt/ponsim_olt.py
index 2e78aba..4bbfac5 100644
--- a/voltha/adapters/ponsim_olt/ponsim_olt.py
+++ b/voltha/adapters/ponsim_olt/ponsim_olt.py
@@ -26,7 +26,7 @@
 import json
 import copy
 import structlog
-from scapy.layers.l2 import Ether, Dot1Q
+from scapy.layers.l2 import Ether, Dot1Q, Dot1AD
 from scapy.layers.inet import IP, Raw
 from twisted.internet import reactor
 from twisted.internet.defer import inlineCallbacks
@@ -618,11 +618,19 @@
         pkt = Ether(frame)
         self.log.info('received packet', pkt=pkt)
         if pkt.haslayer(Dot1Q):
-            outer_shim = pkt.getlayer(Dot1Q)
+            if pkt.haslayer(Dot1AD):
+                outer_shim = pkt.getlayer(Dot1AD)
+            else:
+                outer_shim = pkt.getlayer(Dot1Q)
 
             if pkt.haslayer(IP) or outer_shim.type == EAP_ETH_TYPE:
-                cvid = outer_shim.vlan
-                logical_port = self.get_subscriber_uni_port(cvid)
+                # We don't have any context about the packet at this point.
+                # Assume that only downstream traffic is double-tagged.
+                if isinstance(outer_shim.payload, Dot1Q):
+                    logical_port = int(self.nni_port.port_no)
+                else:
+                    cvid = outer_shim.vlan
+                    logical_port = self.get_subscriber_uni_port(cvid)
                 popped_frame = (
                         Ether(src=pkt.src, dst=pkt.dst, type=outer_shim.type) /
                         outer_shim.payload
@@ -856,15 +864,19 @@
         if egress_port != self.nni_port.port_no:
             # don't do the vlan manipulation for the NNI port, vlans are already correct
             if pkt.haslayer(Dot1Q):
-                # For QinQ-tagged packets from ONOS:
-                # - Outer header is 802.1AD
-                # - Inner header is 802.1Q
-                # - Send inner header and payload
-                payload = pkt.getlayer(Dot1Q)
-                out_pkt = (
-                    Ether(src=pkt.src, dst=pkt.dst) /
-                    payload
-                )
+                if pkt.haslayer(Dot1AD):
+                    outer_shim = pkt.getlayer(Dot1AD)
+                else:
+                    outer_shim = pkt.getlayer(Dot1Q)
+                if isinstance(outer_shim.payload, Dot1Q):
+                    # If double tag, remove the outer tag
+                    out_pkt = (
+                            Ether(src=pkt.src, dst=pkt.dst,
+                                  type=outer_shim.type) /
+                            outer_shim.payload
+                    )
+                else:
+                    out_pkt = pkt
             else:
                 # Add egress port as VLAN tag
                 out_pkt = (
