diff --git a/acceptance/openstack/networking/v2/network_test.go b/acceptance/openstack/networking/v2/network_test.go
index 4fe7775..27a7e1a 100644
--- a/acceptance/openstack/networking/v2/network_test.go
+++ b/acceptance/openstack/networking/v2/network_test.go
@@ -154,17 +154,23 @@
 	}
 
 	Equals(t, n.Status, "ACTIVE")
-	DeepEquals(t, n.Subnets, []string{})
+	DeepEquals(t, n.Subnets, []interface{}{})
 	Equals(t, n.Name, "sample_network")
 	Equals(t, n.ProviderPhysicalNetwork, "")
 	Equals(t, n.ProviderNetworkType, "local")
-	Equals(t, n.ProviderSegmentationID, "")
+	Equals(t, n.ProviderSegmentationID, 0)
 	Equals(t, n.AdminStateUp, true)
 	Equals(t, n.RouterExternal, false)
 	Equals(t, n.Shared, false)
 	Equals(t, n.ID, networkID)
 
 	// Update network
+	n, err = networks.Update(Client, networkID, networks.NetworkOpts{Name: "new_network_name"})
+	if err != nil {
+		t.Fatalf("Unexpected error: %#v", err)
+	}
+
+	Equals(t, n.Name, "new_network_name")
 
 	// Delete network
 }
diff --git a/openstack/networking/v2/networks/requests.go b/openstack/networking/v2/networks/requests.go
index 7b647fe..9a23cc0 100644
--- a/openstack/networking/v2/networks/requests.go
+++ b/openstack/networking/v2/networks/requests.go
@@ -1,9 +1,6 @@
 package networks
 
 import (
-	"encoding/json"
-	"fmt"
-
 	"github.com/racker/perigee"
 	"github.com/rackspace/gophercloud"
 )
@@ -52,12 +49,12 @@
 	return &ext, nil
 }
 
-func Get(c *gophercloud.ServiceClient, id string) (*Network, error) {
-	var n Network
+func Get(c *gophercloud.ServiceClient, id string) (*NetworkResult, error) {
+	var n NetworkResult
 	_, err := perigee.Request("GET", NetworkURL(c, id), perigee.Options{
 		MoreHeaders: c.Provider.AuthenticatedHeaders(),
 		Results: &struct {
-			Network *Network `json:"network"`
+			Network *NetworkResult `json:"network"`
 		}{&n},
 		OkCodes: []int{200},
 	})
@@ -74,25 +71,7 @@
 	TenantID     string
 }
 
-type NetworkProvider struct {
-	ProviderSegmentationID  int    `json:"provider:segmentation_id"`
-	ProviderPhysicalNetwork string `json:"provider:physical_network"`
-	ProviderNetworkType     string `json:"provider:network_type"`
-}
-
-type NetworkResult struct {
-	Status              string            `json:"status"`
-	Subnets             []interface{}     `json:"subnets"`
-	Name                string            `json:"name"`
-	AdminStateUp        bool              `json:"admin_state_up"`
-	TenantID            string            `json:"tenant_id"`
-	Segments            []NetworkProvider `json:"segments"`
-	Shared              bool              `json:"shared"`
-	PortSecurityEnabled bool              `json:"port_security_enabled"`
-	ID                  string            `json:"id"`
-}
-
-func Create(c *gophercloud.ServiceClient, opts NetworkOpts) (*NetworkResult, error) {
+func Create(c *gophercloud.ServiceClient, opts NetworkOpts) (*NetworkCreateResult, error) {
 	// Define structures
 	type network struct {
 		AdminStateUp bool    `json:"admin_state_up"`
@@ -104,7 +83,7 @@
 		Network network `json:"network"`
 	}
 	type response struct {
-		Network *NetworkResult `json:"network"`
+		Network *NetworkCreateResult `json:"network"`
 	}
 
 	// Validate
@@ -123,9 +102,6 @@
 		reqBody.Network.TenantID = &opts.TenantID
 	}
 
-	j, _ := json.Marshal(reqBody)
-	fmt.Println(string(j))
-
 	// Send request to API
 	var res response
 	_, err := perigee.Request("POST", CreateURL(c), perigee.Options{
@@ -140,3 +116,45 @@
 
 	return res.Network, nil
 }
+
+func Update(c *gophercloud.ServiceClient, networkID string, opts NetworkOpts) (*NetworkResult, error) {
+	// Define structures
+	type network struct {
+		AdminStateUp bool    `json:"admin_state_up"`
+		Name         string  `json:"name"`
+		Shared       *bool   `json:"shared,omitempty"`
+		TenantID     *string `json:"tenant_id,omitempty"`
+	}
+
+	type request struct {
+		Network network `json:"network"`
+	}
+	type response struct {
+		Network *NetworkResult `json:"network"`
+	}
+
+	// Populate request body
+	reqBody := request{Network: network{
+		AdminStateUp: opts.AdminStateUp,
+		Name:         opts.Name,
+		Shared:       opts.Shared,
+	}}
+
+	if opts.TenantID != "" {
+		reqBody.Network.TenantID = &opts.TenantID
+	}
+
+	// Send request to API
+	var res response
+	_, err := perigee.Request("PUT", NetworkURL(c, networkID), perigee.Options{
+		MoreHeaders: c.Provider.AuthenticatedHeaders(),
+		ReqBody:     &reqBody,
+		Results:     &res,
+		OkCodes:     []int{200},
+	})
+	if err != nil {
+		return nil, err
+	}
+
+	return res.Network, nil
+}
diff --git a/openstack/networking/v2/networks/requests_test.go b/openstack/networking/v2/networks/requests_test.go
index 61d9268..a52adab 100644
--- a/openstack/networking/v2/networks/requests_test.go
+++ b/openstack/networking/v2/networks/requests_test.go
@@ -251,11 +251,11 @@
 	}
 
 	Equals(t, n.Status, "ACTIVE")
-	DeepEquals(t, n.Subnets, []string{"54d6f61d-db07-451c-9ab3-b9609b6b6f0b"})
+	DeepEquals(t, n.Subnets, []interface{}{"54d6f61d-db07-451c-9ab3-b9609b6b6f0b"})
 	Equals(t, n.Name, "private-network")
 	Equals(t, n.ProviderPhysicalNetwork, "")
 	Equals(t, n.ProviderNetworkType, "local")
-	Equals(t, n.ProviderSegmentationID, "")
+	Equals(t, n.ProviderSegmentationID, 0)
 	Equals(t, n.AdminStateUp, true)
 	Equals(t, n.TenantID, "4fd44f30292945e481c7b8a0c8908869")
 	Equals(t, n.RouterExternal, true)
@@ -364,3 +364,58 @@
 		t.Fatalf("Unexpected error: %#v", err)
 	}
 }
+
+func TestUpdateNetwork(t *testing.T) {
+	th.SetupHTTP()
+	defer th.TeardownHTTP()
+
+	th.Mux.HandleFunc("/v2.0/networks/4e8e5957-649f-477b-9e5b-f1f75b21c03c", 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, `
+{
+		"network": {
+				"name": "new_network_name",
+				"admin_state_up": false,
+				"shared": true
+		}
+}
+			`)
+
+		w.Header().Add("Content-Type", "application/json")
+		w.WriteHeader(http.StatusOK)
+
+		fmt.Fprintf(w, `
+{
+    "network": {
+        "status": "ACTIVE",
+        "subnets": [],
+        "name": "new_network_name",
+        "provider:physical_network": null,
+        "admin_state_up": false,
+        "tenant_id": "4fd44f30292945e481c7b8a0c8908869",
+        "provider:network_type": "local",
+        "router:external": false,
+        "shared": true,
+        "id": "4e8e5957-649f-477b-9e5b-f1f75b21c03c",
+        "provider:segmentation_id": null
+    }
+}
+		`)
+	})
+
+	shared := true
+	options := NetworkOpts{Name: "new_network_name", AdminStateUp: false, Shared: &shared}
+
+	n, err := Update(ServiceClient(), "4e8e5957-649f-477b-9e5b-f1f75b21c03c", options)
+	if err != nil {
+		t.Fatalf("Unexpected error: %#v", err)
+	}
+
+	Equals(t, n.Name, "new_network_name")
+	Equals(t, n.AdminStateUp, false)
+	Equals(t, n.Shared, true)
+	Equals(t, n.ID, "4e8e5957-649f-477b-9e5b-f1f75b21c03c")
+}
diff --git a/openstack/networking/v2/networks/results.go b/openstack/networking/v2/networks/results.go
index b48086c..741a959 100644
--- a/openstack/networking/v2/networks/results.go
+++ b/openstack/networking/v2/networks/results.go
@@ -7,30 +7,32 @@
 	"github.com/rackspace/gophercloud"
 )
 
-// A Network represents a a virtual layer-2 broadcast domain.
-type Network struct {
-	// Id is the unique identifier for the network.
-	ID string `json:"id"`
-	// Name is the (not necessarily unique) human-readable identifier for the network.
-	Name string `json:"name"`
-	// AdminStateUp is administrative state of the network. If false, network is down.
-	AdminStateUp bool `json:"admin_state_up"`
-	// Status indicates if the network is operational. Possible values: active, down, build, error.
-	Status string `json:"status"`
-	// Subnets are IP address blocks that can be used to assign IP addresses to virtual instances.
-	Subnets []string `json:"subnets"`
-	// Shared indicates whether the network can be accessed by any tenant or not.
-	Shared bool `json:"shared"`
-	// TenantId is the owner of the network. Admins may specify TenantId other than their own.
-	TenantID string `json:"tenant_id"`
-	// RouterExternal indicates if the network is connected to an external router.
-	RouterExternal bool `json:"router:external"`
-	// ProviderPhysicalNetwork is the name of the provider physical network.
+type NetworkProvider struct {
+	ProviderSegmentationID  int    `json:"provider:segmentation_id"`
 	ProviderPhysicalNetwork string `json:"provider:physical_network"`
-	// ProviderNetworkType is the type of provider network (eg "vlan").
-	ProviderNetworkType string `json:"provider:network_type"`
-	// ProviderSegmentationId is the provider network identifier (such as the vlan id).
-	ProviderSegmentationID string `json:"provider:segmentation_id"`
+	ProviderNetworkType     string `json:"provider:network_type"`
+}
+
+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"`
+}
+
+type NetworkCreateResult struct {
+	Network
+	Segments            []NetworkProvider `json:"segments"`
+	PortSecurityEnabled bool              `json:"port_security_enabled"`
 }
 
 type APIVersion struct {
