diff --git a/openstack/identity/v3/roles/requests.go b/openstack/identity/v3/roles/requests.go
index cfa1b38..d95c1e5 100644
--- a/openstack/identity/v3/roles/requests.go
+++ b/openstack/identity/v3/roles/requests.go
@@ -5,8 +5,18 @@
 	"github.com/rackspace/gophercloud/pagination"
 )
 
-// RoleAssignmentsOpts allows you to query the RoleAssignments method.
-type RoleAssignmentsOpts struct {
+// ListAssignmentsOptsBuilder allows extensions to add additional parameters to
+// the ListAssignments request.
+type ListAssignmentsOptsBuilder interface {
+	ToRolesListAssignmentsQuery() (string, error)
+}
+
+// ListAssignmentsOpts allows you to query the ListAssignments method.
+// Specify one of or a combination of GroupId, RoleId, ScopeDomainId, ScopeProjectId,
+// and/or UserId to search for roles assigned to corresponding entities.
+// Effective lists effective assignments at the user, project, and domain level,
+// allowing for the effects of group membership.
+type ListAssignmentsOpts struct {
 	GroupId        string `q:"group.id"`
 	RoleId         string `q:"role.id"`
 	ScopeDomainId  string `q:"scope.domain.id"`
@@ -15,17 +25,26 @@
 	Effective      bool   `q:"effective"`
 }
 
-// RoleAssignments enumerates the roles assigned to a specified resource.
-func RoleAssignments(client *gophercloud.ServiceClient, opts RoleAssignmentsOpts) pagination.Pager {
-	u := roleAssignmentsURL(client)
+// ToRolesListAssignmentsQuery formats a ListAssignmentsOpts into a query string.
+func (opts ListAssignmentsOpts) ToRolesListAssignmentsQuery() (string, error) {
 	q, err := gophercloud.BuildQueryString(opts)
 	if err != nil {
+		return "", err
+	}
+	return q.String(), nil
+}
+
+// ListAssignments enumerates the roles assigned to a specified resource.
+func ListAssignments(client *gophercloud.ServiceClient, opts ListAssignmentsOptsBuilder) pagination.Pager {
+	url := listAssignmentsURL(client)
+	query, err := opts.ToRolesListAssignmentsQuery()
+	if err != nil {
 		return pagination.Pager{Err: err}
 	}
-	u += q.String()
+	url += query
 	createPage := func(r pagination.PageResult) pagination.Page {
 		return RoleAssignmentsPage{pagination.LinkedPageBase{PageResult: r}}
 	}
 
-	return pagination.NewPager(client, u, createPage)
+	return pagination.NewPager(client, url, createPage)
 }
diff --git a/openstack/identity/v3/roles/requests_test.go b/openstack/identity/v3/roles/requests_test.go
index 3ce88b4..d62dbff 100644
--- a/openstack/identity/v3/roles/requests_test.go
+++ b/openstack/identity/v3/roles/requests_test.go
@@ -67,7 +67,7 @@
 	})
 
 	count := 0
-	err := RoleAssignments(client.ServiceClient(), RoleAssignmentsOpts{}).EachPage(func(page pagination.Page) (bool, error) {
+	err := ListAssignments(client.ServiceClient(), ListAssignmentsOpts{}).EachPage(func(page pagination.Page) (bool, error) {
 		count++
 		actual, err := ExtractRoleAssignments(page)
 		if err != nil {
@@ -76,16 +76,16 @@
 
 		expected := []RoleAssignment{
 			RoleAssignment{
-				Role:  &Role{ID: "123456"},
-				Scope: &Scope{Domain: &Domain{ID: "161718"}},
-				User:  &User{ID: "313233"},
-				Group: nil,
+				Role:  Role{ID: "123456"},
+				Scope: Scope{Domain: Domain{ID: "161718"}},
+				User:  User{ID: "313233"},
+				Group: Group{},
 			},
 			RoleAssignment{
-				Role:  &Role{ID: "123456"},
-				Scope: &Scope{Project: &Project{ID: "456789"}},
-				User:  &User{ID: "313233"},
-				Group: nil,
+				Role:  Role{ID: "123456"},
+				Scope: Scope{Project: Project{ID: "456789"}},
+				User:  User{ID: "313233"},
+				Group: Group{},
 			},
 		}
 
diff --git a/openstack/identity/v3/roles/results.go b/openstack/identity/v3/roles/results.go
index 31cb7a3..d25abd2 100644
--- a/openstack/identity/v3/roles/results.go
+++ b/openstack/identity/v3/roles/results.go
@@ -8,10 +8,10 @@
 
 // RoleAssignment is the result of a role assignments query.
 type RoleAssignment struct {
-	Role  *Role  `json:"role,omitempty"`
-	Scope *Scope `json:"scope,omitempty"`
-	User  *User  `json:"user,omitempty"`
-	Group *Group `json:"group,omitempty"`
+	Role  Role  `json:"role,omitempty"`
+	Scope Scope `json:"scope,omitempty"`
+	User  User  `json:"user,omitempty"`
+	Group Group `json:"group,omitempty"`
 }
 
 type Role struct {
@@ -19,8 +19,8 @@
 }
 
 type Scope struct {
-	Domain  *Domain  `json:"domain,omitempty"`
-	Project *Project `json:"domain,omitempty"`
+	Domain  Domain  `json:"domain,omitempty"`
+	Project Project `json:"domain,omitempty"`
 }
 
 type Domain struct {
@@ -53,6 +53,23 @@
 	return len(roleAssignments) == 0, nil
 }
 
+// NextPageURL uses the response's embedded link reference to navigate to the next page of results.
+func (page RoleAssignmentsPage) NextPageURL() (string, error) {
+	type resp struct {
+		Links struct {
+			Next string `mapstructure:"next"`
+		} `mapstructure:"links"`
+	}
+
+	var r resp
+	err := mapstructure.Decode(page.Body, &r)
+	if err != nil {
+		return "", err
+	}
+
+	return r.Links.Next, nil
+}
+
 // ExtractRoleAssignments extracts a slice of RoleAssignments from a Collection acquired from List.
 func ExtractRoleAssignments(page pagination.Page) ([]RoleAssignment, error) {
 	var response struct {
diff --git a/openstack/identity/v3/roles/urls.go b/openstack/identity/v3/roles/urls.go
index 8068ac3..b009340 100644
--- a/openstack/identity/v3/roles/urls.go
+++ b/openstack/identity/v3/roles/urls.go
@@ -2,6 +2,6 @@
 
 import "github.com/rackspace/gophercloud"
 
-func roleAssignmentsURL(client *gophercloud.ServiceClient) string {
+func listAssignmentsURL(client *gophercloud.ServiceClient) string {
 	return client.ServiceURL("role_assignments")
 }
diff --git a/openstack/identity/v3/roles/urls_test.go b/openstack/identity/v3/roles/urls_test.go
index 8e70e22..04679da 100644
--- a/openstack/identity/v3/roles/urls_test.go
+++ b/openstack/identity/v3/roles/urls_test.go
@@ -6,9 +6,9 @@
 	"github.com/rackspace/gophercloud"
 )
 
-func TestRoleAssignmentsURL(t *testing.T) {
+func TestListAssignmentsURL(t *testing.T) {
 	client := gophercloud.ServiceClient{Endpoint: "http://localhost:5000/v3/"}
-	url := roleAssignmentsURL(&client)
+	url := listAssignmentsURL(&client)
 	if url != "http://localhost:5000/v3/role_assignments" {
 		t.Errorf("Unexpected list URL generated: [%s]", url)
 	}
