diff --git a/acceptance/02-list-servers.go b/acceptance/02-list-servers.go
index 64ec4f6..758c706 100644
--- a/acceptance/02-list-servers.go
+++ b/acceptance/02-list-servers.go
@@ -33,14 +33,47 @@
 		panic(err)
 	}
 
+  tryFullDetails(api)
+  tryLinksOnly(api)
+}
+
+func tryLinksOnly(api gophercloud.CloudServersProvider) {
+	servers, err := api.ListServersLinksOnly()
+	if err != nil {
+		panic(err)
+	}
+
+	if !*quiet {
+    fmt.Println("Id,Name")
+		for _, s := range servers {
+      if s.AccessIPv4 != "" {
+        panic("IPv4 not expected")
+      }
+
+      if s.Status != "" {
+        panic("Status not expected")
+      }
+
+      if s.Progress != 0 {
+        panic("Progress not expected")
+      }
+
+			fmt.Printf("%s,\"%s\"\n", s.Id, s.Name)
+		}
+	}
+}
+
+func tryFullDetails(api gophercloud.CloudServersProvider) {
 	servers, err := api.ListServers()
 	if err != nil {
 		panic(err)
 	}
 
 	if !*quiet {
+    fmt.Println("Id,Name,AccessIPv4,Status,Progress")
 		for _, s := range servers {
-			fmt.Printf("%s\n", s.Id)
+			fmt.Printf("%s,\"%s\",%s,%s,%d\n", s.Id, s.Name, s.AccessIPv4, s.Status, s.Progress)
 		}
 	}
 }
+
diff --git a/interfaces.go b/interfaces.go
index b73a118..4342553 100644
--- a/interfaces.go
+++ b/interfaces.go
@@ -27,6 +27,7 @@
   // Servers
 
 	ListServers() ([]Server, error)
+  ListServersLinksOnly() ([]Server, error)
 	ServerById(id string) (*Server, error)
 	CreateServer(ns NewServer) (*NewServer, error)
 	DeleteServerById(id string) error
diff --git a/servers.go b/servers.go
index 30aa959..6cad056 100644
--- a/servers.go
+++ b/servers.go
@@ -23,7 +23,7 @@
 }
 
 // See the CloudServersProvider interface for details.
-func (gcp *genericServersProvider) ListServers() ([]Server, error) {
+func (gcp *genericServersProvider) ListServersLinksOnly() ([]Server, error) {
 	var ss []Server
 
 	url := gcp.endpoint + "/servers"
@@ -38,6 +38,23 @@
 }
 
 // See the CloudServersProvider interface for details.
+func (gcp *genericServersProvider) ListServers() ([]Server, error) {
+	var ss []Server
+
+	err := gcp.context.WithReauth(gcp.access, func() error {
+		url := gcp.endpoint + "/servers/detail"
+		return perigee.Get(url, perigee.Options{
+			CustomClient: gcp.context.httpClient,
+			Results:      &struct{ Servers *[]Server }{&ss},
+			MoreHeaders: map[string]string{
+				"X-Auth-Token": gcp.access.AuthToken(),
+			},
+		})
+	})
+	return ss, err
+}
+
+// See the CloudServersProvider interface for details.
 func (gsp *genericServersProvider) ServerById(id string) (*Server, error) {
 	var s *Server
 
