diff --git a/openstack/networking/v2/extensions/layer3/routers/requests.go b/openstack/networking/v2/extensions/layer3/routers/requests.go
index ed0ea07..5fde236 100644
--- a/openstack/networking/v2/extensions/layer3/routers/requests.go
+++ b/openstack/networking/v2/extensions/layer3/routers/requests.go
@@ -42,6 +42,14 @@
 	})
 }
 
+// CreateOptsBuilder is the interface options structs have to satisfy in order
+// to be used in the main Create operation in this package. Since many
+// extensions decorate or modify the common logic, it is useful for them to
+// satisfy a basic interface in order for them to be used.
+type CreateOptsBuilder interface {
+	ToRouterCreateMap() (map[string]interface{}, error)
+}
+
 // CreateOpts contains all the values needed to create a new router. There are
 // no required values.
 type CreateOpts struct {
@@ -49,10 +57,36 @@
 	AdminStateUp *bool
 	Distributed  *bool
 	TenantID     string
-	DriverOpts   map[string]string
 	GatewayInfo  *GatewayInfo
 }
 
+// ToRouterCreateMap casts a CreateOpts struct to a map.
+func (opts CreateOpts) ToRouterCreateMap() (map[string]interface{}, error) {
+	r := make(map[string]interface{})
+
+	if gophercloud.MaybeString(opts.Name) != nil {
+		r["name"] = opts.Name
+	}
+
+	if opts.AdminStateUp != nil {
+		r["admin_state_up"] = opts.AdminStateUp
+	}
+
+	if opts.Distributed != nil {
+		r["distributed"] = opts.Distributed
+	}
+
+	if gophercloud.MaybeString(opts.TenantID) != nil {
+		r["tenant_id"] = opts.TenantID
+	}
+
+	if opts.GatewayInfo != nil {
+		r["external_gateway_info"] = opts.GatewayInfo
+	}
+
+	return map[string]interface{}{"router": r}, nil
+}
+
 // Create accepts a CreateOpts struct and uses the values to create a new
 // logical router. When it is created, the router does not have an internal
 // interface - it is not associated to any subnet.
@@ -61,43 +95,15 @@
 // GatewayInfo struct. The external gateway for the router must be plugged into
 // an external network (it is external if its `router:external' field is set to
 // true).
-func Create(c *gophercloud.ServiceClient, opts CreateOpts) CreateResult {
-
-	type request struct {
-		Router map[string]interface{} `json:"router"`
-	}
-
-	routerMap := make(map[string]interface{})
-
-	if gophercloud.MaybeString(opts.Name) != nil {
-		routerMap["name"] = opts.Name
-	}
-
-	if opts.AdminStateUp != nil {
-		routerMap["admin_state_up"] = opts.AdminStateUp
-	}
-
-	if opts.Distributed != nil {
-		routerMap["distributed"] = opts.Distributed
-	}
-
-	if gophercloud.MaybeString(opts.TenantID) != nil {
-		routerMap["tenant_id"] = opts.TenantID
-	}
-
-	if opts.GatewayInfo != nil {
-		routerMap["external_gateway_info"] = opts.GatewayInfo
-	}
-
-	if opts.DriverOpts != nil {
-		for k, v := range opts.DriverOpts {
-			routerMap[k] = v
-		}
-	}
-
-	reqBody := request{Router: routerMap}
-
+func Create(c *gophercloud.ServiceClient, opts CreateOptsBuilder) CreateResult {
 	var res CreateResult
+
+	reqBody, err := opts.ToRouterCreateMap()
+	if err != nil {
+		res.Err = err
+		return res
+	}
+
 	_, res.Err = c.Post(rootURL(c), reqBody, &res.Body, nil)
 	return res
 }
