diff --git a/openstack/networking/v2/extensions/quotas/doc.go b/openstack/networking/v2/extensions/quotas/doc.go
deleted file mode 100755
index d03c081..0000000
--- a/openstack/networking/v2/extensions/quotas/doc.go
+++ /dev/null
@@ -1 +0,0 @@
-package quotas
diff --git a/openstack/networking/v2/extensions/quotas/errors.go b/openstack/networking/v2/extensions/quotas/errors.go
deleted file mode 100755
index d03c081..0000000
--- a/openstack/networking/v2/extensions/quotas/errors.go
+++ /dev/null
@@ -1 +0,0 @@
-package quotas
diff --git a/openstack/networking/v2/extensions/quotas/requests.go b/openstack/networking/v2/extensions/quotas/requests.go
deleted file mode 100755
index df16dd9..0000000
--- a/openstack/networking/v2/extensions/quotas/requests.go
+++ /dev/null
@@ -1,84 +0,0 @@
-package quotas
-
-import (
-	"github.com/racker/perigee"
-	"github.com/rackspace/gophercloud"
-)
-
-func Get(c *gophercloud.ServiceClient) GetResult {
-	var res GetResult
-	_, err := perigee.Request("GET", rootURL(c), perigee.Options{
-		Results:     &res.Resp,
-		MoreHeaders: c.Provider.AuthenticatedHeaders(),
-	})
-	res.Err = err
-	return res
-}
-
-type UpdateOpts struct {
-	Subnet        *int
-	Router        *int
-	Network       *int
-	FloatingIP    *int
-	Port          *int
-	HealthMonitor *int
-	SecGroupRule  *int
-	SecGroup      *int
-	VIP           *int
-	Member        *int
-	Pool          *int
-}
-
-func Update(c *gophercloud.ServiceClient, opts UpdateOpts) UpdateResult {
-	type quota struct {
-		Subnet        *int `json:"subnet,omitempty"`
-		Router        *int `json:"router,omitempty"`
-		Network       *int `json:"network,omitempty"`
-		FloatingIP    *int `json:"floatingip,omitempty"`
-		Port          *int `json:"port,omitempty"`
-		HealthMonitor *int `json:"health_monitor,omitempty"`
-		SecGroupRule  *int `json:"security_group_rule,omitempty"`
-		VIP           *int `json:"vip,omitempty"`
-		SecGroup      *int `json:"security_group,omitempty"`
-		Member        *int `json:"member,omitempty"`
-		Pool          *int `json:"pool,omitempty"`
-	}
-
-	type request struct {
-		Quota quota `json:"quota"`
-	}
-
-	reqBody := request{Quota: quota{
-		Subnet:        opts.Subnet,
-		Router:        opts.Router,
-		Network:       opts.Network,
-		FloatingIP:    opts.FloatingIP,
-		Port:          opts.Port,
-		HealthMonitor: opts.HealthMonitor,
-		SecGroupRule:  opts.SecGroupRule,
-		VIP:           opts.VIP,
-		SecGroup:      opts.SecGroup,
-		Member:        opts.Member,
-		Pool:          opts.Pool,
-	}}
-
-	var res UpdateResult
-	_, err := perigee.Request("PUT", rootURL(c), perigee.Options{
-		MoreHeaders: c.Provider.AuthenticatedHeaders(),
-		ReqBody:     &reqBody,
-		Results:     &res.Resp,
-		OkCodes:     []int{200},
-	})
-	res.Err = err
-	return res
-}
-
-func Reset(c *gophercloud.ServiceClient) DeleteResult {
-	var res DeleteResult
-	_, err := perigee.Request("DELETE", rootURL(c), perigee.Options{
-		MoreHeaders: c.Provider.AuthenticatedHeaders(),
-		OkCodes:     []int{204},
-	})
-	res.Err = err
-	return res
-}
diff --git a/openstack/networking/v2/extensions/quotas/requests_test.go b/openstack/networking/v2/extensions/quotas/requests_test.go
deleted file mode 100755
index 5809a96..0000000
--- a/openstack/networking/v2/extensions/quotas/requests_test.go
+++ /dev/null
@@ -1,116 +0,0 @@
-package quotas
-
-import (
-	"fmt"
-	"net/http"
-	"testing"
-
-	"github.com/rackspace/gophercloud"
-	th "github.com/rackspace/gophercloud/testhelper"
-)
-
-const tokenID = "123"
-
-func serviceClient() *gophercloud.ServiceClient {
-	return &gophercloud.ServiceClient{
-		Provider: &gophercloud.ProviderClient{TokenID: tokenID},
-		Endpoint: th.Endpoint(),
-	}
-}
-
-func TestGet(t *testing.T) {
-	th.SetupHTTP()
-	defer th.TeardownHTTP()
-
-	th.Mux.HandleFunc("/v2.0/quotas", func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "GET")
-		th.TestHeader(t, r, "X-Auth-Token", tokenID)
-
-		w.Header().Add("Content-Type", "application/json")
-		w.WriteHeader(http.StatusOK)
-
-		fmt.Fprintf(w, `
-{
-    "quota": {
-        "subnet": 10,
-        "router": 10,
-        "port": 50,
-        "network": 10,
-        "floatingip": 50
-    }
-}
-      `)
-	})
-
-	qs, err := Get(serviceClient()).Extract()
-	th.AssertNoErr(t, err)
-
-	th.AssertEquals(t, qs.Subnet, 10)
-	th.AssertEquals(t, qs.Router, 10)
-	th.AssertEquals(t, qs.Port, 50)
-	th.AssertEquals(t, qs.Network, 10)
-	th.AssertEquals(t, qs.FloatingIP, 50)
-}
-
-func TestUpdate(t *testing.T) {
-	th.SetupHTTP()
-	defer th.TeardownHTTP()
-
-	th.Mux.HandleFunc("/v2.0/quotas", func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "PUT")
-		th.TestHeader(t, r, "X-Auth-Token", tokenID)
-		th.TestHeader(t, r, "Content-Type", "application/json")
-		th.TestHeader(t, r, "Accept", "application/json")
-		th.TestJSONRequest(t, r, `
-{
-    "quota": {
-        "subnet": 40,
-        "router": 40,
-        "network": 10,
-        "floatingip": 30,
-        "port": 30
-    }
-}
-			`)
-
-		w.Header().Add("Content-Type", "application/json")
-		w.WriteHeader(http.StatusOK)
-
-		fmt.Fprintf(w, `
-{
-    "quota": {
-        "subnet": 40,
-        "router": 40,
-        "network": 10,
-        "floatingip": 30,
-        "port": 30
-    }
-}
-    `)
-	})
-
-	i10, i30, i40 := 10, 30, 40
-	opts := UpdateOpts{Subnet: &i40, Router: &i40, Network: &i10, FloatingIP: &i30, Port: &i30}
-	qs, err := Update(serviceClient(), opts).Extract()
-	th.AssertNoErr(t, err)
-
-	th.AssertEquals(t, qs.Subnet, 40)
-	th.AssertEquals(t, qs.Router, 40)
-	th.AssertEquals(t, qs.Port, 30)
-	th.AssertEquals(t, qs.Network, 10)
-	th.AssertEquals(t, qs.FloatingIP, 30)
-}
-
-func TestReset(t *testing.T) {
-	th.SetupHTTP()
-	defer th.TeardownHTTP()
-
-	th.Mux.HandleFunc("/v2.0/quotas", func(w http.ResponseWriter, r *http.Request) {
-		th.TestMethod(t, r, "DELETE")
-		th.TestHeader(t, r, "X-Auth-Token", tokenID)
-		w.WriteHeader(http.StatusNoContent)
-	})
-
-	res := Reset(serviceClient())
-	th.AssertNoErr(t, res.Err)
-}
diff --git a/openstack/networking/v2/extensions/quotas/results.go b/openstack/networking/v2/extensions/quotas/results.go
deleted file mode 100755
index 23bed9e..0000000
--- a/openstack/networking/v2/extensions/quotas/results.go
+++ /dev/null
@@ -1,51 +0,0 @@
-package quotas
-
-import (
-	"fmt"
-
-	"github.com/mitchellh/mapstructure"
-	"github.com/rackspace/gophercloud"
-)
-
-type Quota struct {
-	Subnet        int `json:"subnet"`
-	Router        int `json:"router"`
-	Port          int `json:"port"`
-	Network       int `json:"network"`
-	FloatingIP    int `json:"floatingip"`
-	HealthMonitor int `json:"health_monitor"`
-	SecGroupRule  int `json:"security_group_rule"`
-	SecGroup      int `json:"security_group"`
-	VIP           int `json:"vip"`
-	Member        int `json:"member"`
-	Pool          int `json:"pool"`
-}
-
-type commonResult gophercloud.CommonResult
-
-func (r commonResult) Extract() (*Quota, error) {
-	if r.Err != nil {
-		return nil, r.Err
-	}
-
-	var res struct {
-		Quota *Quota `json:"quota"`
-	}
-
-	err := mapstructure.Decode(r.Resp, &res)
-	if err != nil {
-		return nil, fmt.Errorf("Error decoding Neutron quotas: %v", err)
-	}
-
-	return res.Quota, nil
-}
-
-type GetResult struct {
-	commonResult
-}
-
-type UpdateResult struct {
-	commonResult
-}
-
-type DeleteResult commonResult
diff --git a/openstack/networking/v2/extensions/quotas/urls.go b/openstack/networking/v2/extensions/quotas/urls.go
deleted file mode 100755
index a933a7d..0000000
--- a/openstack/networking/v2/extensions/quotas/urls.go
+++ /dev/null
@@ -1,9 +0,0 @@
-package quotas
-
-import "github.com/rackspace/gophercloud"
-
-const version = "v2.0"
-
-func rootURL(c *gophercloud.ServiceClient) string {
-	return c.ServiceURL(version, "quotas")
-}
diff --git a/openstack/networking/v2/extensions/quotas/urls_tests.go b/openstack/networking/v2/extensions/quotas/urls_tests.go
deleted file mode 100755
index e75ff1b..0000000
--- a/openstack/networking/v2/extensions/quotas/urls_tests.go
+++ /dev/null
@@ -1,20 +0,0 @@
-package quotas
-
-import (
-	"testing"
-
-	"github.com/rackspace/gophercloud"
-	th "github.com/rackspace/gophercloud/testhelper"
-)
-
-const endpoint = "http://localhost:57909/"
-
-func endpointClient() *gophercloud.ServiceClient {
-	return &gophercloud.ServiceClient{Endpoint: endpoint}
-}
-
-func TestRootURL(t *testing.T) {
-	expected := endpoint + "v2.0/quotas"
-	actual := rootURL(endpointClient())
-	th.AssertEquals(t, expected, actual)
-}
