diff --git a/planetstack/neutron_extension/1:2013.2.2-0ubuntu1~cloud0/nat.py b/planetstack/neutron_extension/1:2013.2.2-0ubuntu1~cloud0/nat.py
new file mode 100644
index 0000000..04e39f1
--- /dev/null
+++ b/planetstack/neutron_extension/1:2013.2.2-0ubuntu1~cloud0/nat.py
@@ -0,0 +1,50 @@
+from neutron.api.v2 import attributes
+
+FORWARD_PORTS = 'nat:forward_ports'
+
+EXTENDED_ATTRIBUTES_2_0 = {
+    'ports': {
+        FORWARD_PORTS: {'allow_post': True, 'allow_put': True,
+                       'default': attributes.ATTR_NOT_SPECIFIED,
+                       'is_visible': True},
+    }
+}
+
+
+class Nat(object):
+    """Extension class supporting OpenCloud NAT networking
+
+    This class is used by Quantum's extension framework to make
+    metadata about the OpenCloud Port extension available to
+    clients. No new resources are defined by this extension. Instead,
+    the existing Port resource's request and response messages are
+    extended with attributes in the OpenCloud namespace.
+    """
+
+    @classmethod
+    def get_name(cls):
+        return "OpenCloud NAT Networking Extension"
+
+    @classmethod
+    def get_alias(cls):
+        return "nat"
+
+    @classmethod
+    def get_description(cls):
+        return "Add TCP/UDP port forwarding through NAT to Quantum Port objects"
+
+    @classmethod
+    def get_namespace(cls):
+        # return "http://docs.openstack.org/ext/provider/api/v1.0"
+        # Nothing there right now
+        return "http://www.vicci.org/ext/opencloud/nat/api/v0.1"
+
+    @classmethod
+    def get_updated(cls):
+        return "2013-09-12T10:00:00-00:00"
+
+    def get_extended_resources(self, version):
+        if version == "2.0":
+            return EXTENDED_ATTRIBUTES_2_0
+        else:
+            return {}
