diff --git a/interfaces.go b/interfaces.go
index 8e02fc3..d6c75b9 100644
--- a/interfaces.go
+++ b/interfaces.go
@@ -24,28 +24,109 @@
 // CloudServersProvider instances encapsulate a Cloud Servers API, should one exist in the service catalog
 // for your provider.
 type CloudServersProvider interface {
-  // Servers
+	// Servers
 
+	// ListServers provides a complete list of servers hosted by the user
+	// in a given region.  This function differs from ListServersLinksOnly()
+	// in that it returns all available details for each server returned.
 	ListServers() ([]Server, error)
+
+	// ListServers provides a complete list of servers hosted by the user
+	// in a given region.  This function differs from ListServers() in that
+	// it returns only IDs and links to each server returned.
+	//
+	// This function should be used only under certain circumstances.
+	// It's most useful for checking to see if a server with a given ID exists,
+	// or that you have permission to work with that server.  It's also useful
+	// when the cost of retrieving the server link list plus the overhead of manually
+	// invoking ServerById() for each of the servers you're interested in is less than
+	// just calling ListServers() to begin with.  This may be a consideration, for
+	// example, with mobile applications.
+	//
+	// In other cases, you probably should just call ListServers() and cache the
+	// results to conserve overall bandwidth and reduce your access rate on the API.
 	ListServersLinksOnly() ([]Server, error)
+
+	// ServerById will retrieve a detailed server description given the unique ID
+	// of a server.  The ID can be returned by either ListServers() or by ListServersLinksOnly().
 	ServerById(id string) (*Server, error)
+
+	// CreateServer requests a new server to be created by the cloud server provider.
+	// The user must pass in a pointer to an initialized NewServerContainer structure.
+	// Please refer to the NewServerContainer documentation for more details.
+	//
+	// If the NewServer structure's AdminPass is empty (""), a password will be
+	// automatically generated by your OpenStack provider, and returned through the
+	// AdminPass field of the result.  Take care, however; this will be the only time
+	// this happens.  No other means exists in the public API to acquire a password
+	// for a pre-existing server.  If you lose it, you'll need to call SetAdminPassword()
+	// to set a new one.
 	CreateServer(ns NewServer) (*NewServer, error)
+
+	// DeleteServerById requests that the server with the assigned ID be removed
+	// from your account.  The delete happens asynchronously.
 	DeleteServerById(id string) error
+
+	// SetAdminPassword requests that the server with the specified ID have its
+	// administrative password changed.  For Linux, BSD, or other POSIX-like
+	// system, this password corresponds to the root user.  For Windows machines,
+	// the Administrator password will be affected instead.
 	SetAdminPassword(id string, pw string) error
+
+	// ResizeServer can be a short-hand for RebuildServer where only the size of the server
+	// changes.  Note that after the resize operation is requested, you will need to confirm
+	// the resize has completed for changes to take effect permanently.  Changes will assume
+	// to be confirmed even without an explicit confirmation after 24 hours from the initial
+	// request.
 	ResizeServer(id, newName, newFlavor, newDiskConfig string) error
+
+	// RevertResize will reject a server's resized configuration, thus
+	// rolling back to the original server.
 	RevertResize(id string) error
+
+	// ConfirmResizeServer will acknowledge a server's resized configuration.
 	ConfirmResize(id string) error
+
+	// RebootServer requests that the server with the specified ID be rebooted.
+	// Two reboot mechanisms exist.
+	//
+	// - Hard.  This will physically power-cycle the unit.
+	// - Soft.  This will attempt to use the server's software-based mechanisms to restart
+	//           the machine.  E.g., "shutdown -r now" on Linux.
 	RebootServer(id string, hard bool) error
+
+	// RescueServer requests that the server with the specified ID be placed into
+	// a state of maintenance.  The server instance is replaced with a new instance,
+	// of the same flavor and image.  This new image will have the boot volume of the
+	// original machine mounted as a secondary device, so that repair and administration
+	// may occur.  Use UnrescueServer() to restore the server to its previous state.
+	// Note also that many providers will impose a time limit for how long a server may
+	// exist in rescue mode!  Consult the API documentation for your provider for
+	// details.
 	RescueServer(id string) (string, error)
+
+	// UnrescueServer requests that a server in rescue state be placed into its nominal
+	// operating state.
 	UnrescueServer(id string) error
+
+	// UpdateServer alters one or more fields of the identified server's Server record.
+	// However, not all fields may be altered.  Presently, only Name, AccessIPv4, and
+	// AccessIPv6 fields may be altered.   If unspecified, or set to an empty or zero
+	// value, the corresponding field remains unaltered.
+	//
+	// This function returns the new set of server details if successful.
 	UpdateServer(id string, newValues NewServerSettings) (*Server, error)
 
-  // Images
+	// Images
 
-  ListImages() ([]Image, error)
+	// ListImages yields the list of available operating system images.  This function
+	// returns full details for each image, if available.
+	ListImages() ([]Image, error)
 
-  // Flavors
+	// Flavors
 
-  ListFlavors() ([]Flavor, error)
+	// ListFlavors yields the list of available system flavors.  This function
+	// returns full details for each flavor, if available.
+	ListFlavors() ([]Flavor, error)
 }
 
