diff --git a/acceptance/14-list-addresses.go b/acceptance/14-list-addresses.go
new file mode 100644
index 0000000..d1835e1
--- /dev/null
+++ b/acceptance/14-list-addresses.go
@@ -0,0 +1,44 @@
+package main
+
+import (
+	"fmt"
+	"flag"
+	"github.com/rackspace/gophercloud"
+)
+
+var quiet = flag.Bool("quiet", false, "Quiet mode, for acceptance testing.  $? still indicates errors though.")
+
+func main() {
+	flag.Parse()
+	withIdentity(false, func(acc gophercloud.AccessProvider) {
+		withServerApi(acc, func(servers gophercloud.CloudServersProvider) {
+			log("Creating server")
+			id, err := createServer(servers, "", "", "", "")
+			if err != nil {
+				panic(err)
+			}
+			waitForServerState(servers, id, "ACTIVE")
+			defer servers.DeleteServerById(id)
+
+			log("Getting list of addresses...")
+			addresses, err := servers.ListAddresses(id)
+			if (err != nil) && (err != gophercloud.WarnUnauthoritative) {
+				panic(err)
+			}
+			if err == gophercloud.WarnUnauthoritative {
+				log("Uh oh -- got a response back, but it's not authoritative for some reason.")
+			}
+			for _, addr := range addresses.Public {
+				log("Address:", addr.Addr, "  IPv", addr.Version)
+			}
+
+			log("Done")
+		})
+	})
+}
+
+func log(s... interface{}) {
+	if !*quiet {
+		fmt.Println(s...)
+	}
+}
diff --git a/errors.go b/errors.go
index 5ea3991..1719fd2 100644
--- a/errors.go
+++ b/errors.go
@@ -35,3 +35,10 @@
 // responsible for a previous request bombing with an error, but pass in an
 // error interface which doesn't belong to the web client.
 var ErrError = fmt.Errorf("Attempt to solicit actual HTTP response code from error entity which doesn't know")
+
+// WarnUnauthoritative warnings happen when a service believes its response
+// to be correct, but is not in a position of knowing for sure at the moment.
+// For example, the service could be responding with cached data that has
+// exceeded its time-to-live setting, but which has not yet received an official
+// update from an authoritative source.
+var WarnUnauthoritative = fmt.Errorf("Unauthoritative data")
diff --git a/interfaces.go b/interfaces.go
index 626e531..c986fce 100644
--- a/interfaces.go
+++ b/interfaces.go
@@ -128,6 +128,14 @@
 	// Other providers may reserve the right to act on additional fields.
 	RebuildServer(id string, ns NewServer) (*Server, error)
 
+	// Addresses
+
+	// ListAddresses yields the list of available addresses for the server.
+	// This information is also returned by ServerById() in the Server.Addresses
+	// field.  However, if you have a lot of servers and all you need are addresses,
+	// this function might be more efficient.
+	ListAddresses(id string) (AddressSet, error)
+
 	// Images
 
 	// ListImages yields the list of available operating system images.  This function
diff --git a/servers.go b/servers.go
index 85f49ff..c9a53a9 100644
--- a/servers.go
+++ b/servers.go
@@ -268,7 +268,7 @@
 }
 
 // See the CloudServersProvider interface for details.
-func (gsp *genericServersProvider) RebuildServer (id string, ns NewServer) (*Server, error) {
+func (gsp *genericServersProvider) RebuildServer(id string, ns NewServer) (*Server, error) {
 	var s *Server
 
 	err := gsp.context.WithReauth(gsp.access, func() error {
@@ -288,6 +288,32 @@
 	return s, err
 }
 
+// See the CloudServersProvider interface for details.
+func (gsp *genericServersProvider) ListAddresses(id string) (AddressSet, error) {
+	var pas *AddressSet
+	var statusCode int
+
+	err := gsp.context.WithReauth(gsp.access, func() error {
+		ep := fmt.Sprintf("%s/servers/%s/ips", gsp.endpoint, id)
+		return perigee.Get(ep, perigee.Options{
+			Results: &struct{ Addresses **AddressSet }{&pas},
+			MoreHeaders: map[string]string{
+				"X-Auth-Token": gsp.access.AuthToken(),
+			},
+			OkCodes:    []int{200, 203},
+			StatusCode: &statusCode,
+		})
+	})
+
+	if err != nil {
+		if statusCode == 203 {
+			err = WarnUnauthoritative
+		}
+	}
+
+	return *pas, err
+}
+
 // RaxBandwidth provides measurement of server bandwidth consumed over a given audit interval.
 type RaxBandwidth struct {
 	AuditPeriodEnd    string `json:"audit_period_end"`
