diff --git a/examples/thin.py b/examples/thin.py
new file mode 100644
index 000000000..2cddb8c9b
--- /dev/null
+++ b/examples/thin.py
@@ -0,0 +1,39 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+"""
+Example Connection Command
+
+Make sure you can authenticate before running this command.
+
+For example:
+    python -m examples.thin
+"""
+
+import sys
+
+from examples import common
+from examples import connection
+from openstack.network.v2 import thin
+
+
+def run_thin(opts):
+    session = connection.make_connection(opts).session
+    request = thin.Thin()
+    for objay in request.list_networks(session):
+        print(objay['id'])
+    return
+
+
+if __name__ == "__main__":
+    opts = common.setup()
+    sys.exit(common.main(opts, run_thin))
diff --git a/openstack/network/v2/thin.py b/openstack/network/v2/thin.py
new file mode 100644
index 000000000..1b4411e98
--- /dev/null
+++ b/openstack/network/v2/thin.py
@@ -0,0 +1,98 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+"""Thin interface to network objects.
+
+This class provides a meaningful thin interface to network objects.  The
+interface does not create resource objects, it just returns dictionairies.
+Except in special cases, the signatures of the methods are as follows:
+
+    create_*(session, attrs, r_id=None, path_args=None)
+    delete_*(session, r_id, path_args=None)
+    find_*(session, name_or_id, path_args=None, id_only=True)
+    get_*(session, r_id, path_args=None, include_headers=False)
+    head_*(session, r_id, path_args=None)
+    list_*(session, limit=None, marker=None, path_args=None, **params)
+    update_*(session, r_id, attrs, path_args=None)
+
+Examples
+--------
+
+Find a router and update the administrative state.
+
+    from openstack.network.v2 import thin
+    requests = thin.Thin()
+    my_router = requests.find_router(session, 'awesome'):
+    my_router['admin_state_up'] = False
+    requests.update_router(session, my_router['id], my_router)
+
+"""
+
+from openstack.network.v2 import floatingip
+from openstack.network.v2 import network
+from openstack.network.v2 import port
+from openstack.network.v2 import router
+from openstack.network.v2 import security_group as group
+from openstack.network.v2 import security_group_rule as rule
+from openstack.network.v2 import subnet
+
+
+class Thin(object):
+
+    create_ip = floatingip.FloatingIP.create_by_id
+    delete_ip = floatingip.FloatingIP.delete_by_id
+    find_ip = floatingip.FloatingIP.find
+    get_ip = floatingip.FloatingIP.get_data_by_id
+    list_ips = floatingip.FloatingIP.list
+    update_ip = floatingip.FloatingIP.update_by_id
+
+    create_network = network.Network.create_by_id
+    delete_network = network.Network.delete_by_id
+    find_network = network.Network.find
+    get_network = network.Network.get_data_by_id
+    list_networks = network.Network.list
+    update_network = network.Network.update_by_id
+
+    create_port = port.Port.create_by_id
+    delete_port = port.Port.delete_by_id
+    find_port = port.Port.find
+    get_port = port.Port.get_data_by_id
+    list_ports = port.Port.list
+    update_port = port.Port.update_by_id
+
+    create_router = router.Router.create_by_id
+    delete_router = router.Router.delete_by_id
+    find_router = router.Router.find
+    get_router = router.Router.get_data_by_id
+    list_routers = router.Router.list
+    update_router = router.Router.update_by_id
+
+    create_security_group = group.SecurityGroup.create_by_id
+    delete_security_group = group.SecurityGroup.delete_by_id
+    find_security_group = group.SecurityGroup.find
+    get_security_group = group.SecurityGroup.get_data_by_id
+    list_security_groups = group.SecurityGroup.list
+    update_security_group = group.SecurityGroup.update_by_id
+
+    create_security_group_rule = rule.SecurityGroupRule.create_by_id
+    delete_security_group_rule = rule.SecurityGroupRule.delete_by_id
+    find_security_group_rule = rule.SecurityGroupRule.find
+    get_security_group_rule = rule.SecurityGroupRule.get_data_by_id
+    list_security_group_rules = rule.SecurityGroupRule.list
+    update_security_group_rule = rule.SecurityGroupRule.update_by_id
+
+    create_subnet = subnet.Subnet.create_by_id
+    delete_subnet = subnet.Subnet.delete_by_id
+    find_subnet = subnet.Subnet.find
+    get_subnet = subnet.Subnet.get_data_by_id
+    list_subnets = subnet.Subnet.list
+    update_subnet = subnet.Subnet.update_by_id