IDs are actually integers apparently
diff --git a/openstack/compute/v2/extensions/secgroups/requests.go b/openstack/compute/v2/extensions/secgroups/requests.go
index 3147310..3707840 100644
--- a/openstack/compute/v2/extensions/secgroups/requests.go
+++ b/openstack/compute/v2/extensions/secgroups/requests.go
@@ -108,7 +108,7 @@
 
 // Update will modify the mutable properties of a security group, notably its
 // name and description.
-func Update(client *gophercloud.ServiceClient, id string, opts UpdateOptsBuilder) UpdateResult {
+func Update(client *gophercloud.ServiceClient, id int, opts UpdateOptsBuilder) UpdateResult {
 	var result UpdateResult
 
 	reqBody, err := opts.ToSecGroupUpdateMap()
@@ -128,7 +128,7 @@
 }
 
 // Get will return details for a particular security group.
-func Get(client *gophercloud.ServiceClient, id string) GetResult {
+func Get(client *gophercloud.ServiceClient, id int) GetResult {
 	var result GetResult
 
 	_, result.Err = perigee.Request("GET", resourceURL(client, id), perigee.Options{
@@ -141,7 +141,7 @@
 }
 
 // Delete will permanently delete a security group from the project.
-func Delete(client *gophercloud.ServiceClient, id string) gophercloud.ErrResult {
+func Delete(client *gophercloud.ServiceClient, id int) gophercloud.ErrResult {
 	var result gophercloud.ErrResult
 
 	_, result.Err = perigee.Request("DELETE", resourceURL(client, id), perigee.Options{
@@ -156,7 +156,7 @@
 // existing security group.
 type CreateRuleOpts struct {
 	// Required - the ID of the group that this rule will be added to.
-	ParentGroupID string `json:"parent_group_id"`
+	ParentGroupID int `json:"parent_group_id"`
 
 	// Required - the lower bound of the port range that will be opened.
 	FromPort int `json:"from_port"`
@@ -188,7 +188,7 @@
 func (opts CreateRuleOpts) ToRuleCreateMap() (map[string]interface{}, error) {
 	rule := make(map[string]interface{})
 
-	if opts.ParentGroupID == "" {
+	if opts.ParentGroupID == 0 {
 		return rule, errors.New("A ParentGroupID must be set")
 	}
 	if opts.FromPort == 0 {
@@ -242,7 +242,7 @@
 }
 
 // DeleteRule will permanently delete a rule from a security group.
-func DeleteRule(client *gophercloud.ServiceClient, id string) gophercloud.ErrResult {
+func DeleteRule(client *gophercloud.ServiceClient, id int) gophercloud.ErrResult {
 	var result gophercloud.ErrResult
 
 	_, result.Err = perigee.Request("DELETE", resourceRuleURL(client, id), perigee.Options{