diff --git a/acceptance/openstack/networking/v2/apiversion_test.go b/acceptance/openstack/networking/v2/apiversion_test.go
new file mode 100644
index 0000000..79198c5
--- /dev/null
+++ b/acceptance/openstack/networking/v2/apiversion_test.go
@@ -0,0 +1,51 @@
+// +build acceptance networking
+
+package v2
+
+import (
+	"testing"
+
+	"github.com/rackspace/gophercloud"
+	"github.com/rackspace/gophercloud/openstack/networking/v2/apiversions"
+	th "github.com/rackspace/gophercloud/testhelper"
+)
+
+func TestListAPIVersions(t *testing.T) {
+	Setup(t)
+	defer Teardown()
+
+	pager := apiversions.ListVersions(Client)
+	err := pager.EachPage(func(page gophercloud.Page) (bool, error) {
+		t.Logf("--- Page ---")
+
+		versions, err := apiversions.ExtractAPIVersions(page)
+		th.AssertNoErr(t, err)
+
+		for _, v := range versions {
+			t.Logf("API Version: ID [%s] Status [%s]", v.ID, v.Status)
+		}
+
+		return true, nil
+	})
+	th.CheckNoErr(t, err)
+}
+
+func TestListAPIResources(t *testing.T) {
+	Setup(t)
+	defer Teardown()
+
+	pager := apiversions.ListVersionResources(Client, "v2.0")
+	err := pager.EachPage(func(page gophercloud.Page) (bool, error) {
+		t.Logf("--- Page ---")
+
+		vrs, err := apiversions.ExtractVersionResources(page)
+		th.AssertNoErr(t, err)
+
+		for _, vr := range vrs {
+			t.Logf("Network: Name [%s] Collection [%s]", vr.Name, vr.Collection)
+		}
+
+		return true, nil
+	})
+	th.CheckNoErr(t, err)
+}
diff --git a/acceptance/openstack/networking/v2/extension_test.go b/acceptance/openstack/networking/v2/extension_test.go
new file mode 100644
index 0000000..2cbe3a7
--- /dev/null
+++ b/acceptance/openstack/networking/v2/extension_test.go
@@ -0,0 +1,45 @@
+// +build acceptance networking
+
+package v2
+
+import (
+	"testing"
+
+	"github.com/rackspace/gophercloud"
+	"github.com/rackspace/gophercloud/openstack/networking/v2/extensions"
+	th "github.com/rackspace/gophercloud/testhelper"
+)
+
+func TestListExts(t *testing.T) {
+	Setup(t)
+	defer Teardown()
+
+	pager := extensions.List(Client)
+	err := pager.EachPage(func(page gophercloud.Page) (bool, error) {
+		t.Logf("--- Page ---")
+
+		exts, err := extensions.ExtractExtensions(page)
+		th.AssertNoErr(t, err)
+
+		for _, ext := range exts {
+			t.Logf("Extension: Name [%s] Description [%s]", ext.Name, ext.Description)
+		}
+
+		return true, nil
+	})
+	th.CheckNoErr(t, err)
+}
+
+func TestGetExt(t *testing.T) {
+	Setup(t)
+	defer Teardown()
+
+	ext, err := extensions.Get(Client, "service-type")
+	th.AssertNoErr(t, err)
+
+	th.AssertEquals(t, ext.Updated, "2013-01-20T00:00:00-00:00")
+	th.AssertEquals(t, ext.Name, "Neutron Service Type Management")
+	th.AssertEquals(t, ext.Namespace, "http://docs.openstack.org/ext/neutron/service-type/api/v1.0")
+	th.AssertEquals(t, ext.Alias, "service-type")
+	th.AssertEquals(t, ext.Description, "API for retrieving service providers for Neutron advanced services")
+}
diff --git a/acceptance/openstack/networking/v2/network_test.go b/acceptance/openstack/networking/v2/network_test.go
index 53b9f59..6eb7182 100644
--- a/acceptance/openstack/networking/v2/network_test.go
+++ b/acceptance/openstack/networking/v2/network_test.go
@@ -4,6 +4,7 @@
 
 import (
 	"os"
+	"strconv"
 	"testing"
 
 	"github.com/rackspace/gophercloud"
@@ -13,9 +14,7 @@
 	th "github.com/rackspace/gophercloud/testhelper"
 )
 
-var (
-	Client *gophercloud.ServiceClient
-)
+var Client *gophercloud.ServiceClient
 
 func NewClient() (*gophercloud.ServiceClient, error) {
 	opts, err := utils.AuthOptions()
@@ -44,60 +43,25 @@
 	Client = nil
 }
 
-func TestListAPIVersions(t *testing.T) {
-	Setup(t)
-	defer Teardown()
-
-	res, err := networks.APIVersions(Client)
-	th.AssertNoErr(t, err)
-
-	err = gophercloud.EachPage(res, func(page gophercloud.Collection) bool {
-		t.Logf("--- Page ---")
-		for _, v := range networks.ToAPIVersions(page) {
-			t.Logf("API version: ID [%s] Status [%s]", v.ID, v.Status)
-		}
-		return true
-	})
-	th.AssertNoErr(t, err)
-}
-
-func TestGetApiInfo(t *testing.T) {
-	Setup(t)
-	defer Teardown()
-
-	res, err := networks.APIInfo(Client, "v2.0")
-	th.AssertNoErr(t, err)
-
-	err = gophercloud.EachPage(res, func(page gophercloud.Collection) bool {
-		t.Logf("--- Page ---")
-		for _, r := range networks.ToAPIResource(page) {
-			t.Logf("API resource: Name [%s] Collection [%s]", r.Name, r.Collection)
-		}
-		return true
-	})
-	th.AssertNoErr(t, err)
-}
-
-func TestListExts(t *testing.T) {
-	//networks.Extensions()
-}
-
-func TestGetExt(t *testing.T) {
-	Setup(t)
-	defer Teardown()
-
-	ext, err := networks.GetExtension(Client, "service-type")
-	th.AssertNoErr(t, err)
-
-	th.AssertEquals(t, ext.Updated, "2013-01-20T00:00:00-00:00")
-	th.AssertEquals(t, ext.Name, "Neutron Service Type Management")
-	th.AssertEquals(t, ext.Namespace, "http://docs.openstack.org/ext/neutron/service-type/api/v1.0")
-	th.AssertEquals(t, ext.Alias, "service-type")
-	th.AssertEquals(t, ext.Description, "API for retrieving service providers for Neutron advanced services")
-}
-
 func TestListNetworks(t *testing.T) {
-	//networks.List()
+	Setup(t)
+	defer Teardown()
+
+	pager := networks.List(Client, networks.ListOpts{})
+	err := pager.EachPage(func(page gophercloud.Page) (bool, error) {
+		t.Logf("--- Page ---")
+
+		networks, err := networks.ExtractNetworks(page)
+		th.AssertNoErr(t, err)
+
+		for _, n := range networks {
+			t.Logf("Network: ID [%s] Name [%s] Status [%s] Is shared? [%s]",
+				n.ID, n.Name, n.Status, strconv.FormatBool(n.Shared))
+		}
+
+		return true, nil
+	})
+	th.CheckNoErr(t, err)
 }
 
 func TestNetworkCRUDOperations(t *testing.T) {
@@ -134,7 +98,7 @@
 	th.AssertEquals(t, n.Name, "new_network_name")
 
 	// Delete network
-	err := networks.Delete(Client, networkID)
+	err = networks.Delete(Client, networkID)
 	th.AssertNoErr(t, err)
 }
 
diff --git a/openstack/networking/v2/api_versions/doc.go b/openstack/networking/v2/api_versions/doc.go
deleted file mode 100644
index 83c4a6a..0000000
--- a/openstack/networking/v2/api_versions/doc.go
+++ /dev/null
@@ -1 +0,0 @@
-package networks
diff --git a/openstack/networking/v2/api_versions/errors.go b/openstack/networking/v2/api_versions/errors.go
deleted file mode 100644
index 83c4a6a..0000000
--- a/openstack/networking/v2/api_versions/errors.go
+++ /dev/null
@@ -1 +0,0 @@
-package networks
diff --git a/openstack/networking/v2/api_versions/requests.go b/openstack/networking/v2/api_versions/requests.go
deleted file mode 100644
index 90e2de3..0000000
--- a/openstack/networking/v2/api_versions/requests.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package networks
-
-import (
-	"github.com/racker/perigee"
-	"github.com/rackspace/gophercloud"
-)
-
-func List(c *gophercloud.ServiceClient) (*APIVersionsList, error) {
-	var resp APIVersionsList
-	_, err := perigee.Request("GET", APIVersionsURL(c), perigee.Options{
-		MoreHeaders: c.Provider.AuthenticatedHeaders(),
-		Results:     &resp,
-		OkCodes:     []int{200},
-	})
-	if err != nil {
-		return nil, err
-	}
-
-	return &resp, nil
-}
-
-func Get(c *gophercloud.ServiceClient, v string) (*APIInfoList, error) {
-	var resp APIInfoList
-	_, err := perigee.Request("GET", APIInfoURL(c, v), perigee.Options{
-		MoreHeaders: c.Provider.AuthenticatedHeaders(),
-		Results:     &resp,
-		OkCodes:     []int{200},
-	})
-	if err != nil {
-		return nil, err
-	}
-
-	return &resp, nil
-}
diff --git a/openstack/networking/v2/api_versions/results.go b/openstack/networking/v2/api_versions/results.go
deleted file mode 100644
index 159f03a..0000000
--- a/openstack/networking/v2/api_versions/results.go
+++ /dev/null
@@ -1,11 +0,0 @@
-package networks
-
-type APIVersion struct {
-	Status string
-	ID     string
-}
-
-type APIResource struct {
-	Name       string
-	Collection string
-}
diff --git a/openstack/networking/v2/apiversions/doc.go b/openstack/networking/v2/apiversions/doc.go
new file mode 100644
index 0000000..76bdb14
--- /dev/null
+++ b/openstack/networking/v2/apiversions/doc.go
@@ -0,0 +1 @@
+package apiversions
diff --git a/openstack/networking/v2/apiversions/errors.go b/openstack/networking/v2/apiversions/errors.go
new file mode 100644
index 0000000..76bdb14
--- /dev/null
+++ b/openstack/networking/v2/apiversions/errors.go
@@ -0,0 +1 @@
+package apiversions
diff --git a/openstack/networking/v2/apiversions/requests.go b/openstack/networking/v2/apiversions/requests.go
new file mode 100644
index 0000000..8e3ff32
--- /dev/null
+++ b/openstack/networking/v2/apiversions/requests.go
@@ -0,0 +1,11 @@
+package apiversions
+
+import "github.com/rackspace/gophercloud"
+
+func ListVersions(c *gophercloud.ServiceClient) gophercloud.Pager {
+	return gophercloud.NewLinkedPager(c, APIVersionsURL(c))
+}
+
+func ListVersionResources(c *gophercloud.ServiceClient, v string) gophercloud.Pager {
+	return gophercloud.NewLinkedPager(c, APIInfoURL(c, v))
+}
diff --git a/openstack/networking/v2/api_versions/requests_test.go b/openstack/networking/v2/apiversions/requests_test.go
similarity index 63%
rename from openstack/networking/v2/api_versions/requests_test.go
rename to openstack/networking/v2/apiversions/requests_test.go
index cbcc8ae..0922318 100644
--- a/openstack/networking/v2/api_versions/requests_test.go
+++ b/openstack/networking/v2/apiversions/requests_test.go
@@ -1,4 +1,4 @@
-package networks
+package apiversions
 
 import (
 	"fmt"
@@ -20,7 +20,7 @@
 	}
 }
 
-func TestList(t *testing.T) {
+func TestListVersions(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
 
@@ -48,21 +48,31 @@
 }`)
 	})
 
-	res, err := List(ServiceClient())
-	th.AssertNoErr(t, err)
+	count := 0
 
-	coll, err := gophercloud.AllPages(res)
-	th.AssertNoErr(t, err)
+	ListVersions(ServiceClient()).EachPage(func(page gophercloud.Page) (bool, error) {
+		count++
+		actual, err := ExtractAPIVersions(page)
+		if err != nil {
+			t.Errorf("Failed to extract API versions: %v", err)
+			return false, err
+		}
 
-	actual := ToAPIVersions(coll)
+		expected := []APIVersion{
+			APIVersion{
+				Status: "CURRENT",
+				ID:     "v2.0",
+			},
+		}
 
-	expected := []APIVersion{
-		APIVersion{
-			Status: "CURRENT",
-			ID:     "v2.0",
-		},
+		th.AssertDeepEquals(t, expected, actual)
+
+		return true, nil
+	})
+
+	if count != 1 {
+		t.Errorf("Expected 1 page, got %d", count)
 	}
-	th.AssertDeepEquals(t, expected, actual)
 }
 
 func TestAPIInfo(t *testing.T) {
@@ -114,26 +124,37 @@
 			`)
 	})
 
-	res, err := Get(ServiceClient(), "v2.0")
-	th.AssertNoErr(t, err)
+	count := 0
 
-	coll, err := gophercloud.AllPages(res)
-	th.AssertNoErr(t, err)
+	ListVersionResources(ServiceClient(), "v2.0").EachPage(func(page gophercloud.Page) (bool, error) {
+		count++
+		actual, err := ExtractVersionResources(page)
+		if err != nil {
+			t.Errorf("Failed to extract version resources: %v", err)
+			return false, err
+		}
 
-	actual := ToAPIResource(coll)
-	expected := []APIResource{
-		APIResource{
-			Name:       "subnet",
-			Collection: "subnets",
-		},
-		APIResource{
-			Name:       "network",
-			Collection: "networks",
-		},
-		APIResource{
-			Name:       "port",
-			Collection: "ports",
-		},
+		expected := []APIVersionResource{
+			APIVersionResource{
+				Name:       "subnet",
+				Collection: "subnets",
+			},
+			APIVersionResource{
+				Name:       "network",
+				Collection: "networks",
+			},
+			APIVersionResource{
+				Name:       "port",
+				Collection: "ports",
+			},
+		}
+
+		th.AssertDeepEquals(t, expected, actual)
+
+		return true, nil
+	})
+
+	if count != 1 {
+		t.Errorf("Expected 1 page, got %d", count)
 	}
-	th.AssertDeepEquals(t, expected, actual)
 }
diff --git a/openstack/networking/v2/apiversions/results.go b/openstack/networking/v2/apiversions/results.go
new file mode 100644
index 0000000..dbf40eb
--- /dev/null
+++ b/openstack/networking/v2/apiversions/results.go
@@ -0,0 +1,42 @@
+package apiversions
+
+import (
+	"github.com/mitchellh/mapstructure"
+	"github.com/rackspace/gophercloud"
+)
+
+type APIVersion struct {
+	Status string `mapstructure:"status" json:"status"`
+	ID     string `mapstructure:"id" json:"id"`
+}
+
+func ExtractAPIVersions(page gophercloud.Page) ([]APIVersion, error) {
+	var resp struct {
+		Versions []APIVersion `mapstructure:"versions"`
+	}
+
+	err := mapstructure.Decode(page.(gophercloud.LinkedPage).Body, &resp)
+	if err != nil {
+		return nil, err
+	}
+
+	return resp.Versions, nil
+}
+
+type APIVersionResource struct {
+	Name       string `mapstructure:"name" json:"name"`
+	Collection string `mapstructure:"collection" json:"collection"`
+}
+
+func ExtractVersionResources(page gophercloud.Page) ([]APIVersionResource, error) {
+	var resp struct {
+		APIVersionResources []APIVersionResource `mapstructure:"resources"`
+	}
+
+	err := mapstructure.Decode(page.(gophercloud.LinkedPage).Body, &resp)
+	if err != nil {
+		return nil, err
+	}
+
+	return resp.APIVersionResources, nil
+}
diff --git a/openstack/networking/v2/api_versions/urls.go b/openstack/networking/v2/apiversions/urls.go
similarity index 93%
rename from openstack/networking/v2/api_versions/urls.go
rename to openstack/networking/v2/apiversions/urls.go
index 3f49261..e66434e 100644
--- a/openstack/networking/v2/api_versions/urls.go
+++ b/openstack/networking/v2/apiversions/urls.go
@@ -1,4 +1,4 @@
-package networks
+package apiversions
 
 import (
 	"strings"
diff --git a/openstack/networking/v2/api_versions/urls_test.go b/openstack/networking/v2/apiversions/urls_test.go
similarity index 96%
rename from openstack/networking/v2/api_versions/urls_test.go
rename to openstack/networking/v2/apiversions/urls_test.go
index 1ef7f81..383ba59 100644
--- a/openstack/networking/v2/api_versions/urls_test.go
+++ b/openstack/networking/v2/apiversions/urls_test.go
@@ -1,4 +1,4 @@
-package networks
+package apiversions
 
 import (
 	"testing"
diff --git a/openstack/networking/v2/extensions/doc.go b/openstack/networking/v2/extensions/doc.go
index 83c4a6a..aeec0fa 100644
--- a/openstack/networking/v2/extensions/doc.go
+++ b/openstack/networking/v2/extensions/doc.go
@@ -1 +1 @@
-package networks
+package extensions
diff --git a/openstack/networking/v2/extensions/errors.go b/openstack/networking/v2/extensions/errors.go
index 83c4a6a..aeec0fa 100644
--- a/openstack/networking/v2/extensions/errors.go
+++ b/openstack/networking/v2/extensions/errors.go
@@ -1 +1 @@
-package networks
+package extensions
diff --git a/openstack/networking/v2/extensions/requests.go b/openstack/networking/v2/extensions/requests.go
index b406c51..1ef7b6d 100644
--- a/openstack/networking/v2/extensions/requests.go
+++ b/openstack/networking/v2/extensions/requests.go
@@ -1,4 +1,4 @@
-package networks
+package extensions
 
 import (
 	"github.com/racker/perigee"
@@ -20,3 +20,7 @@
 	}
 	return &ext, nil
 }
+
+func List(c *gophercloud.ServiceClient) gophercloud.Pager {
+	return gophercloud.NewLinkedPager(c, ListExtensionURL(c))
+}
diff --git a/openstack/networking/v2/extensions/requests_test.go b/openstack/networking/v2/extensions/requests_test.go
index 5ae7ec6..ae2fbcb 100644
--- a/openstack/networking/v2/extensions/requests_test.go
+++ b/openstack/networking/v2/extensions/requests_test.go
@@ -1,4 +1,4 @@
-package networks
+package extensions
 
 import (
 	"fmt"
@@ -21,14 +21,66 @@
 }
 
 func TestList(t *testing.T) {
+	th.SetupHTTP()
+	defer th.TeardownHTTP()
 
+	th.Mux.HandleFunc("/v2.0/extensions", 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")
+
+		fmt.Fprintf(w, `
+{
+    "extensions": [
+        {
+            "updated": "2013-01-20T00:00:00-00:00",
+            "name": "Neutron Service Type Management",
+            "links": [],
+            "namespace": "http://docs.openstack.org/ext/neutron/service-type/api/v1.0",
+            "alias": "service-type",
+            "description": "API for retrieving service providers for Neutron advanced services"
+        }
+    ]
+}
+			`)
+	})
+
+	count := 0
+
+	List(ServiceClient()).EachPage(func(page gophercloud.Page) (bool, error) {
+		count++
+		actual, err := ExtractExtensions(page)
+		if err != nil {
+			t.Errorf("Failed to extract extensions: %v", err)
+		}
+
+		expected := []Extension{
+			Extension{
+				Updated:     "2013-01-20T00:00:00-00:00",
+				Name:        "Neutron Service Type Management",
+				Links:       []interface{}{},
+				Namespace:   "http://docs.openstack.org/ext/neutron/service-type/api/v1.0",
+				Alias:       "service-type",
+				Description: "API for retrieving service providers for Neutron advanced services",
+			},
+		}
+
+		th.AssertDeepEquals(t, expected, actual)
+
+		return true, nil
+	})
+
+	if count != 1 {
+		t.Errorf("Expected 1 page, got %d", count)
+	}
 }
 
 func TestGet(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
 
-	th.Mux.HandleFunc("/v2.0/extension/agent", func(w http.ResponseWriter, r *http.Request) {
+	th.Mux.HandleFunc("/v2.0/extensions/agent", func(w http.ResponseWriter, r *http.Request) {
 		th.TestMethod(t, r, "GET")
 		th.TestHeader(t, r, "X-Auth-Token", TokenID)
 
diff --git a/openstack/networking/v2/extensions/results.go b/openstack/networking/v2/extensions/results.go
index 3b21644..c249149 100644
--- a/openstack/networking/v2/extensions/results.go
+++ b/openstack/networking/v2/extensions/results.go
@@ -1,4 +1,9 @@
-package networks
+package extensions
+
+import (
+	"github.com/mitchellh/mapstructure"
+	"github.com/rackspace/gophercloud"
+)
 
 type Extension struct {
 	Updated     string        `json:"updated"`
@@ -8,3 +13,16 @@
 	Alias       string        `json:"alias"`
 	Description string        `json:"description"`
 }
+
+func ExtractExtensions(page gophercloud.Page) ([]Extension, error) {
+	var resp struct {
+		Extensions []Extension `mapstructure:"extensions"`
+	}
+
+	err := mapstructure.Decode(page.(gophercloud.LinkedPage).Body, &resp)
+	if err != nil {
+		return nil, err
+	}
+
+	return resp.Extensions, nil
+}
diff --git a/openstack/networking/v2/extensions/urls.go b/openstack/networking/v2/extensions/urls.go
index d70dd9b..608b25f 100644
--- a/openstack/networking/v2/extensions/urls.go
+++ b/openstack/networking/v2/extensions/urls.go
@@ -1,4 +1,4 @@
-package networks
+package extensions
 
 import "github.com/rackspace/gophercloud"
 
@@ -7,3 +7,7 @@
 func ExtensionURL(c *gophercloud.ServiceClient, name string) string {
 	return c.ServiceURL(Version, "extensions", name)
 }
+
+func ListExtensionURL(c *gophercloud.ServiceClient) string {
+	return c.ServiceURL(Version, "extensions")
+}
diff --git a/openstack/networking/v2/extensions/urls_test.go b/openstack/networking/v2/extensions/urls_test.go
index af01cb9..34731cd 100644
--- a/openstack/networking/v2/extensions/urls_test.go
+++ b/openstack/networking/v2/extensions/urls_test.go
@@ -1,4 +1,4 @@
-package networks
+package extensions
 
 import (
 	"testing"
@@ -18,3 +18,9 @@
 	expected := Endpoint + "v2.0/extensions/agent"
 	th.AssertEquals(t, expected, actual)
 }
+
+func TestListExtensionURL(t *testing.T) {
+	actual := ListExtensionURL(EndpointClient())
+	expected := Endpoint + "v2.0/extensions"
+	th.AssertEquals(t, expected, actual)
+}
diff --git a/openstack/networking/v2/networks/requests.go b/openstack/networking/v2/networks/requests.go
index 06b0fe7..98e70d1 100644
--- a/openstack/networking/v2/networks/requests.go
+++ b/openstack/networking/v2/networks/requests.go
@@ -1,10 +1,24 @@
 package networks
 
 import (
+	"strconv"
+
 	"github.com/racker/perigee"
 	"github.com/rackspace/gophercloud"
+	"github.com/rackspace/gophercloud/openstack/utils"
 )
 
+type ListOpts struct {
+	Status       string
+	Name         string
+	AdminStateUp *bool
+	TenantID     string
+	Shared       *bool
+	ID           string
+	Page         int
+	PerPage      int
+}
+
 type NetworkOpts struct {
 	AdminStateUp bool
 	Name         string
@@ -12,12 +26,54 @@
 	TenantID     string
 }
 
-func Get(c *gophercloud.ServiceClient, id string) (*NetworkResult, error) {
-	var n NetworkResult
-	_, err := perigee.Request("GET", NetworkURL(c, id), perigee.Options{
+func ptrToStr(val *bool) string {
+	if *val == true {
+		return "true"
+	} else if *val == false {
+		return "false"
+	} else {
+		return ""
+	}
+}
+
+func List(c *gophercloud.ServiceClient, opts ListOpts) gophercloud.Pager {
+	// Build query parameters
+	q := make(map[string]string)
+	if opts.Status != "" {
+		q["status"] = opts.Status
+	}
+	if opts.Name != "" {
+		q["name"] = opts.Name
+	}
+	if opts.AdminStateUp != nil {
+		q["admin_state_up"] = ptrToStr(opts.AdminStateUp)
+	}
+	if opts.TenantID != "" {
+		q["tenant_id"] = opts.TenantID
+	}
+	if opts.Shared != nil {
+		q["shared"] = ptrToStr(opts.Shared)
+	}
+	if opts.ID != "" {
+		q["id"] = opts.ID
+	}
+	if opts.Page != 0 {
+		q["page"] = strconv.Itoa(opts.Page)
+	}
+	if opts.PerPage != 0 {
+		q["per_page"] = strconv.Itoa(opts.PerPage)
+	}
+
+	u := ListURL(c) + utils.BuildQuery(q)
+	return gophercloud.NewLinkedPager(c, u)
+}
+
+func Get(c *gophercloud.ServiceClient, id string) (*Network, error) {
+	var n Network
+	_, err := perigee.Request("GET", GetURL(c, id), perigee.Options{
 		MoreHeaders: c.Provider.AuthenticatedHeaders(),
 		Results: &struct {
-			Network *NetworkResult `json:"network"`
+			Network *Network `json:"network"`
 		}{&n},
 		OkCodes: []int{200},
 	})
@@ -73,7 +129,7 @@
 	return res.Network, nil
 }
 
-func Update(c *gophercloud.ServiceClient, networkID string, opts NetworkOpts) (*NetworkResult, error) {
+func Update(c *gophercloud.ServiceClient, networkID string, opts NetworkOpts) (*Network, error) {
 	// Define structures
 	type network struct {
 		AdminStateUp bool    `json:"admin_state_up"`
@@ -86,7 +142,7 @@
 		Network network `json:"network"`
 	}
 	type response struct {
-		Network *NetworkResult `json:"network"`
+		Network *Network `json:"network"`
 	}
 
 	// Populate request body
@@ -102,7 +158,7 @@
 
 	// Send request to API
 	var res response
-	_, err := perigee.Request("PUT", NetworkURL(c, networkID), perigee.Options{
+	_, err := perigee.Request("PUT", GetURL(c, networkID), perigee.Options{
 		MoreHeaders: c.Provider.AuthenticatedHeaders(),
 		ReqBody:     &reqBody,
 		Results:     &res,
@@ -114,3 +170,11 @@
 
 	return res.Network, nil
 }
+
+func Delete(c *gophercloud.ServiceClient, networkID string) error {
+	_, err := perigee.Request("DELETE", DeleteURL(c, networkID), perigee.Options{
+		MoreHeaders: c.Provider.AuthenticatedHeaders(),
+		OkCodes:     []int{204},
+	})
+	return err
+}
diff --git a/openstack/networking/v2/networks/requests_test.go b/openstack/networking/v2/networks/requests_test.go
index 6fa8222..e677f8e 100644
--- a/openstack/networking/v2/networks/requests_test.go
+++ b/openstack/networking/v2/networks/requests_test.go
@@ -20,6 +20,105 @@
 	}
 }
 
+func TestList(t *testing.T) {
+	th.SetupHTTP()
+	defer th.TeardownHTTP()
+
+	th.Mux.HandleFunc("/v2.0/networks", 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, `
+{
+    "networks": [
+        {
+            "status": "ACTIVE",
+            "subnets": [
+                "54d6f61d-db07-451c-9ab3-b9609b6b6f0b"
+            ],
+            "name": "private-network",
+            "provider:physical_network": null,
+            "admin_state_up": true,
+            "tenant_id": "4fd44f30292945e481c7b8a0c8908869",
+            "provider:network_type": "local",
+            "router:external": true,
+            "shared": true,
+            "id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
+            "provider:segmentation_id": null
+        },
+        {
+            "status": "ACTIVE",
+            "subnets": [
+                "08eae331-0402-425a-923c-34f7cfe39c1b"
+            ],
+            "name": "private",
+            "provider:physical_network": null,
+            "admin_state_up": true,
+            "tenant_id": "26a7980765d0414dbc1fc1f88cdb7e6e",
+            "provider:network_type": "local",
+            "router:external": true,
+            "shared": true,
+            "id": "db193ab3-96e3-4cb3-8fc5-05f4296d0324",
+            "provider:segmentation_id": null
+        }
+    ]
+}
+			`)
+	})
+
+	client := ServiceClient()
+	count := 0
+
+	List(client, ListOpts{}).EachPage(func(page gophercloud.Page) (bool, error) {
+		count++
+		actual, err := ExtractNetworks(page)
+		if err != nil {
+			t.Errorf("Failed to extract networks: %v", err)
+			return false, err
+		}
+
+		expected := []Network{
+			Network{
+				Status:  "ACTIVE",
+				Subnets: []interface{}{"54d6f61d-db07-451c-9ab3-b9609b6b6f0b"},
+				Name:    "private-network",
+				ProviderPhysicalNetwork: "",
+				AdminStateUp:            true,
+				TenantID:                "4fd44f30292945e481c7b8a0c8908869",
+				ProviderNetworkType:     "local",
+				RouterExternal:          true,
+				Shared:                  true,
+				ID:                      "d32019d3-bc6e-4319-9c1d-6722fc136a22",
+				ProviderSegmentationID: 0,
+			},
+			Network{
+				Status:  "ACTIVE",
+				Subnets: []interface{}{"08eae331-0402-425a-923c-34f7cfe39c1b"},
+				Name:    "private",
+				ProviderPhysicalNetwork: "",
+				AdminStateUp:            true,
+				TenantID:                "26a7980765d0414dbc1fc1f88cdb7e6e",
+				ProviderNetworkType:     "local",
+				RouterExternal:          true,
+				Shared:                  true,
+				ID:                      "db193ab3-96e3-4cb3-8fc5-05f4296d0324",
+				ProviderSegmentationID: 0,
+			},
+		}
+
+		th.CheckDeepEquals(t, expected, actual)
+
+		return true, nil
+	})
+
+	if count != 1 {
+		t.Errorf("Expected 1 page, got %d", count)
+	}
+}
+
 func TestGet(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
diff --git a/openstack/networking/v2/networks/results.go b/openstack/networking/v2/networks/results.go
index 4678793..b23395a 100644
--- a/openstack/networking/v2/networks/results.go
+++ b/openstack/networking/v2/networks/results.go
@@ -1,5 +1,10 @@
 package networks
 
+import (
+	"github.com/mitchellh/mapstructure"
+	"github.com/rackspace/gophercloud"
+)
+
 type NetworkProvider struct {
 	ProviderSegmentationID  int    `json:"provider:segmentation_id"`
 	ProviderPhysicalNetwork string `json:"provider:physical_network"`
@@ -7,19 +12,17 @@
 }
 
 type Network struct {
-	Status       string        `json:"status"`
-	Subnets      []interface{} `json:"subnets"`
-	Name         string        `json:"name"`
-	AdminStateUp bool          `json:"admin_state_up"`
-	TenantID     string        `json:"tenant_id"`
-	Shared       bool          `json:"shared"`
-	ID           string        `json:"id"`
-}
-
-type NetworkResult struct {
-	Network
-	NetworkProvider
-	RouterExternal bool `json:"router:external"`
+	Status                  string        `mapstructure:"status" json:"status"`
+	Subnets                 []interface{} `mapstructure:"subnets" json:"subnets"`
+	Name                    string        `mapstructure:"name" json:"name"`
+	AdminStateUp            bool          `mapstructure:"admin_state_up" json:"admin_state_up"`
+	TenantID                string        `mapstructure:"tenant_id" json:"tenant_id"`
+	Shared                  bool          `mapstructure:"shared" json:"shared"`
+	ID                      string        `mapstructure:"id" json:"id"`
+	ProviderSegmentationID  int           `mapstructure:"provider:segmentation_id" json:"provider:segmentation_id"`
+	ProviderPhysicalNetwork string        `mapstructure:"provider:physical_network" json:"provider:physical_network"`
+	ProviderNetworkType     string        `mapstructure:"provider:network_type" json:"provider:network_type"`
+	RouterExternal          bool          `mapstructure:"router:external" json:"router:external"`
 }
 
 type NetworkCreateResult struct {
@@ -27,3 +30,16 @@
 	Segments            []NetworkProvider `json:"segments"`
 	PortSecurityEnabled bool              `json:"port_security_enabled"`
 }
+
+func ExtractNetworks(page gophercloud.Page) ([]Network, error) {
+	var resp struct {
+		Networks []Network `mapstructure:"networks" json:"networks"`
+	}
+
+	err := mapstructure.Decode(page.(gophercloud.LinkedPage).Body, &resp)
+	if err != nil {
+		return nil, err
+	}
+
+	return resp.Networks, nil
+}
diff --git a/openstack/networking/v2/networks/urls.go b/openstack/networking/v2/networks/urls.go
index 13fcc03..a0d660a 100644
--- a/openstack/networking/v2/networks/urls.go
+++ b/openstack/networking/v2/networks/urls.go
@@ -4,10 +4,26 @@
 
 const Version = "v2.0"
 
-func NetworkURL(c *gophercloud.ServiceClient, id string) string {
+func ResourceURL(c *gophercloud.ServiceClient, id string) string {
 	return c.ServiceURL(Version, "networks", id)
 }
 
-func CreateURL(c *gophercloud.ServiceClient) string {
+func RootURL(c *gophercloud.ServiceClient) string {
 	return c.ServiceURL(Version, "networks")
 }
+
+func GetURL(c *gophercloud.ServiceClient, id string) string {
+	return ResourceURL(c, id)
+}
+
+func ListURL(c *gophercloud.ServiceClient) string {
+	return RootURL(c)
+}
+
+func CreateURL(c *gophercloud.ServiceClient) string {
+	return RootURL(c)
+}
+
+func DeleteURL(c *gophercloud.ServiceClient, id string) string {
+	return ResourceURL(c, id)
+}
diff --git a/openstack/networking/v2/networks/urls_test.go b/openstack/networking/v2/networks/urls_test.go
index b8970a2..84a7ae6 100644
--- a/openstack/networking/v2/networks/urls_test.go
+++ b/openstack/networking/v2/networks/urls_test.go
@@ -13,8 +13,8 @@
 	return &gophercloud.ServiceClient{Endpoint: Endpoint}
 }
 
-func TestNetworkURL(t *testing.T) {
-	actual := NetworkURL(EndpointClient(), "foo")
+func TestGetURL(t *testing.T) {
+	actual := GetURL(EndpointClient(), "foo")
 	expected := Endpoint + "v2.0/networks/foo"
 	th.AssertEquals(t, expected, actual)
 }
@@ -24,3 +24,15 @@
 	expected := Endpoint + "v2.0/networks"
 	th.AssertEquals(t, expected, actual)
 }
+
+func TestListURL(t *testing.T) {
+	actual := CreateURL(EndpointClient())
+	expected := Endpoint + "v2.0/networks"
+	th.AssertEquals(t, expected, actual)
+}
+
+func TestDeleteURL(t *testing.T) {
+	actual := DeleteURL(EndpointClient(), "foo")
+	expected := Endpoint + "v2.0/networks/foo"
+	th.AssertEquals(t, expected, actual)
+}
