diff --git a/openstack/compute/v2/extensions/secgroups/requests.go b/openstack/compute/v2/extensions/secgroups/requests.go
index a91922d..58ec6a8 100644
--- a/openstack/compute/v2/extensions/secgroups/requests.go
+++ b/openstack/compute/v2/extensions/secgroups/requests.go
@@ -17,14 +17,21 @@
 	return pagination.NewPager(client, url, createPage)
 }
 
+// List will return a collection of all the security groups for a particular
+// tenant.
 func List(client *gophercloud.ServiceClient) pagination.Pager {
 	return commonList(client, rootURL(client))
 }
 
+// ListByServer will return a collection of all the security groups which are
+// associated with a particular server.
 func ListByServer(client *gophercloud.ServiceClient, serverID string) pagination.Pager {
 	return commonList(client, listByServerURL(client, serverID))
 }
 
+// GroupOpts is the underlying struct responsible for creating or updating
+// security groups. It therefore represents the mutable attributes of a
+// security group.
 type GroupOpts struct {
 	// Optional - the name of your security group. If no value provided, null
 	// will be set.
@@ -35,8 +42,10 @@
 	Description string `json:"description,omitempty"`
 }
 
+// CreateOpts is the struct responsible for creating a security group.
 type CreateOpts GroupOpts
 
+// Create will create a new security group.
 func Create(client *gophercloud.ServiceClient, opts CreateOpts) CreateResult {
 	var result CreateResult
 
@@ -54,8 +63,11 @@
 	return result
 }
 
+// UpdateOpts is the struct responsible for updating an existing security group.
 type UpdateOpts GroupOpts
 
+// Update will modify the mutable properties of a security group, notably its
+// name and description.
 func Update(client *gophercloud.ServiceClient, id string, opts UpdateOpts) UpdateResult {
 	var result UpdateResult
 
@@ -73,6 +85,7 @@
 	return result
 }
 
+// Get will return details for a particular security group.
 func Get(client *gophercloud.ServiceClient, id string) GetResult {
 	var result GetResult
 
@@ -85,6 +98,7 @@
 	return result
 }
 
+// Delete will permanently delete a security group from the project.
 func Delete(client *gophercloud.ServiceClient, id string) gophercloud.ErrResult {
 	var result gophercloud.ErrResult
 
@@ -96,6 +110,8 @@
 	return result
 }
 
+// AddRuleOpts represents the configuration for adding a new rule to an
+// existing security group.
 type AddRuleOpts struct {
 	// Required - the ID of the group that this rule will be added to.
 	ParentGroupID string `json:"parent_group_id"`
@@ -121,6 +137,9 @@
 	FromGroupID string `json:"group_id,omitempty"`
 }
 
+// AddRule will add a new rule to an existing security group (whose ID is
+// specified in AddRuleOpts). You have the option of controlling inbound
+// traffic from both an IP range (CIDR) or from another security group.
 func AddRule(client *gophercloud.ServiceClient, opts AddRuleOpts) AddRuleResult {
 	var result AddRuleResult
 
@@ -159,6 +178,7 @@
 	return result
 }
 
+// DeleteRule will permanently delete a rule from a security group.
 func DeleteRule(client *gophercloud.ServiceClient, id string) gophercloud.ErrResult {
 	var result gophercloud.ErrResult
 
@@ -176,6 +196,8 @@
 	}
 }
 
+// AddServerToGroup will associate a server and a security group, enforcing the
+// rules of the group on the server.
 func AddServerToGroup(client *gophercloud.ServiceClient, serverID, groupName string) gophercloud.ErrResult {
 	var result gophercloud.ErrResult
 
@@ -189,6 +211,7 @@
 	return result
 }
 
+// RemoveServerFromGroup will disassociate a server from a security group.
 func RemoveServerFromGroup(client *gophercloud.ServiceClient, serverID, groupName string) gophercloud.ErrResult {
 	var result gophercloud.ErrResult
 
diff --git a/openstack/compute/v2/extensions/secgroups/results.go b/openstack/compute/v2/extensions/secgroups/results.go
index 17adf44..8610bd5 100644
--- a/openstack/compute/v2/extensions/secgroups/results.go
+++ b/openstack/compute/v2/extensions/secgroups/results.go
@@ -7,34 +7,62 @@
 	"github.com/rackspace/gophercloud/pagination"
 )
 
+// SecurityGroup represents a security group.
 type SecurityGroup struct {
-	ID          string
-	Name        string
+	// The unique ID of the group.
+	ID string
+
+	// The human-readable name of the group, which needs to be unique.
+	Name string
+
+	// The human-readable description of the group.
 	Description string
-	Rules       []Rule
-	TenantID    string `mapstructure:"tenant_id"`
+
+	// The rules which determine how this security group operates.
+	Rules []Rule
+
+	// The ID of the tenant to which this security group belongs to.
+	TenantID string `mapstructure:"tenant_id"`
 }
 
+// Rule represents a security group rule, a policy which determines how a
+// security group operates and what inbound traffic it allows in.
 type Rule struct {
-	ID            string
-	FromPort      int     `mapstructure:"from_port"`
-	ToPort        int     `mapstructure:"to_port"`
-	IPProtocol    string  `mapstructure:"ip_protocol"`
-	IPRange       IPRange `mapstructure:"ip_range"`
-	ParentGroupID string  `mapstructure:"parent_group_id"`
-	Group         Group
+	// The unique ID
+	ID string
+
+	// The lower bound of the port range which this security group should open up
+	FromPort int `mapstructure:"from_port"`
+
+	// The upper bound of the port range which this security group should open up
+	ToPort int `mapstructure:"to_port"`
+
+	// The IP protocol (e.g. TCP) which the security group accepts
+	IPProtocol string `mapstructure:"ip_protocol"`
+
+	// The CIDR IP range whose traffic can be received
+	IPRange IPRange `mapstructure:"ip_range"`
+
+	// The security group ID which this rule belongs to
+	ParentGroupID string `mapstructure:"parent_group_id"`
+
+	// Not documented.
+	Group Group
 }
 
+// IPRange represents the IP range whose traffic will be accepted by the
+// security group.
 type IPRange struct {
 	CIDR string
 }
 
+// Group represents a group.
 type Group struct {
 	TenantID string `mapstructure:"tenant_id"`
 	Name     string
 }
 
-// RolePage is a single page of a user Role collection.
+// SecurityGroupPage is a single page of a SecurityGroup collection.
 type SecurityGroupPage struct {
 	pagination.SinglePageBase
 }
@@ -63,14 +91,17 @@
 	gophercloud.Result
 }
 
+// CreateResult represents the result of a create operation.
 type CreateResult struct {
 	commonResult
 }
 
+// GetResult represents the result of a get operation.
 type GetResult struct {
 	commonResult
 }
 
+// UpdateResult represents the result of an update operation.
 type UpdateResult struct {
 	commonResult
 }
@@ -89,10 +120,12 @@
 	return &response.SecurityGroup, err
 }
 
+// AddRuleResult represents the result when adding rules to a security group.
 type AddRuleResult struct {
 	gophercloud.Result
 }
 
+// Extract will extract a Rule struct from an AddResultRule.
 func (r AddRuleResult) Extract() (*Rule, error) {
 	if r.Err != nil {
 		return nil, r.Err
