diff --git a/openstack/cdn/v1/services/fixtures.go b/openstack/cdn/v1/services/fixtures.go
index ec1fd52..dd35d58 100644
--- a/openstack/cdn/v1/services/fixtures.go
+++ b/openstack/cdn/v1/services/fixtures.go
@@ -170,10 +170,10 @@
 // HandleCreateCDNServiceSuccessfully creates an HTTP handler at `/services` on the test handler mux
 // that responds with a `Create` response.
 func HandleCreateCDNServiceSuccessfully(t *testing.T) {
-  th.Mux.HandleFunc("/services", func(w http.ResponseWriter, r *http.Request) {
-    th.TestMethod(t, r, "POST")
-    th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-    th.TestJSONRequest(t, r, `
+	th.Mux.HandleFunc("/services", func(w http.ResponseWriter, r *http.Request) {
+		th.TestMethod(t, r, "POST")
+		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
+		th.TestJSONRequest(t, r, `
       {
         "name": "mywebsite.com",
         "domains": [
@@ -212,21 +212,21 @@
         "flavor_id": "cdn"
       }
    `)
-   w.Header().Add("Location", "https://global.cdn.api.rackspacecloud.com/v1.0/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0")
-   w.WriteHeader(http.StatusAccepted)
-  })
+		w.Header().Add("Location", "https://global.cdn.api.rackspacecloud.com/v1.0/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0")
+		w.WriteHeader(http.StatusAccepted)
+	})
 }
 
 // HandleGetCDNServiceSuccessfully creates an HTTP handler at `/services/{id}` on the test handler mux
 // that responds with a `Get` response.
 func HandleGetCDNServiceSuccessfully(t *testing.T) {
-  th.Mux.HandleFunc("/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0", func(w http.ResponseWriter, r *http.Request) {
-    th.TestMethod(t, r, "GET")
-    th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
+	th.Mux.HandleFunc("/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0", func(w http.ResponseWriter, r *http.Request) {
+		th.TestMethod(t, r, "GET")
+		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
 
-    w.Header().Set("Content-Type", "application/json")
-    w.WriteHeader(http.StatusOK)
-    fmt.Fprintf(w, `
+		w.Header().Set("Content-Type", "application/json")
+		w.WriteHeader(http.StatusOK)
+		fmt.Fprintf(w, `
     {
         "id": "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0",
         "name": "mywebsite.com",
@@ -299,16 +299,16 @@
         ]
     }
     `)
-  })
+	})
 }
 
 // HandleUpdateCDNServiceSuccessfully creates an HTTP handler at `/services/{id}` on the test handler mux
 // that responds with a `Update` response.
 func HandleUpdateCDNServiceSuccessfully(t *testing.T) {
-  th.Mux.HandleFunc("/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0", func(w http.ResponseWriter, r *http.Request) {
-    th.TestMethod(t, r, "PATCH")
-    th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-    th.TestJSONRequest(t, r, `
+	th.Mux.HandleFunc("/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0", func(w http.ResponseWriter, r *http.Request) {
+		th.TestMethod(t, r, "PATCH")
+		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
+		th.TestJSONRequest(t, r, `
       [
         {
             "op": "replace",
@@ -321,22 +321,22 @@
         },
         {
             "op": "add",
-            "path": "/domains/0",
+            "path": "/domains/-",
             "value": {"domain": "added.mocksite4.com"}
         }
     ]
    `)
-   w.Header().Add("Location", "https://www.poppycdn.io/v1.0/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0")
-   w.WriteHeader(http.StatusAccepted)
-  })
+		w.Header().Add("Location", "https://www.poppycdn.io/v1.0/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0")
+		w.WriteHeader(http.StatusAccepted)
+	})
 }
 
 // HandleDeleteCDNServiceSuccessfully creates an HTTP handler at `/services/{id}` on the test handler mux
 // that responds with a `Delete` response.
 func HandleDeleteCDNServiceSuccessfully(t *testing.T) {
-  th.Mux.HandleFunc("/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0", func(w http.ResponseWriter, r *http.Request) {
-    th.TestMethod(t, r, "DELETE")
-    th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-    w.WriteHeader(http.StatusAccepted)
-  })
+	th.Mux.HandleFunc("/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0", func(w http.ResponseWriter, r *http.Request) {
+		th.TestMethod(t, r, "DELETE")
+		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
+		w.WriteHeader(http.StatusAccepted)
+	})
 }
diff --git a/openstack/cdn/v1/services/requests_test.go b/openstack/cdn/v1/services/requests_test.go
index ca7c269..99e2f53 100644
--- a/openstack/cdn/v1/services/requests_test.go
+++ b/openstack/cdn/v1/services/requests_test.go
@@ -129,8 +129,8 @@
 					},
 				},
 				Restrictions: []Restriction{},
-				FlavorID: "europe",
-				Status:   "deployed",
+				FlavorID:     "europe",
+				Status:       "deployed",
 				Links: []gophercloud.Link{
 					gophercloud.Link{
 						Href: "https://www.poppycdn.io/v1.0/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f1",
@@ -160,204 +160,169 @@
 }
 
 func TestCreate(t *testing.T) {
-  th.SetupHTTP()
-  defer th.TeardownHTTP()
+	th.SetupHTTP()
+	defer th.TeardownHTTP()
 
-  HandleCreateCDNServiceSuccessfully(t)
+	HandleCreateCDNServiceSuccessfully(t)
 
-  createOpts := CreateOpts{
-    Name: "mywebsite.com",
-    Domains: []Domain{
-      Domain{
-        Domain: "www.mywebsite.com",
-      },
-      Domain{
-        Domain: "blog.mywebsite.com",
-      },
-    },
-    Origins: []Origin{
-      Origin{
-        Origin: "mywebsite.com",
-        Port: 80,
-        SSL: false,
-      },
-    },
-    Restrictions: []Restriction{
-      Restriction{
-        Name: "website only",
-        Rules: []RestrictionRule{
-          RestrictionRule{
-            Name: "mywebsite.com",
-            Referrer: "www.mywebsite.com",
-          },
-        },
-      },
-    },
-    Caching: []CacheRule{
-      CacheRule{
-        Name: "default",
-        TTL: 3600,
-      },
-    },
-    FlavorID: "cdn",
-  }
+	createOpts := CreateOpts{
+		Name: "mywebsite.com",
+		Domains: []Domain{
+			Domain{
+				Domain: "www.mywebsite.com",
+			},
+			Domain{
+				Domain: "blog.mywebsite.com",
+			},
+		},
+		Origins: []Origin{
+			Origin{
+				Origin: "mywebsite.com",
+				Port:   80,
+				SSL:    false,
+			},
+		},
+		Restrictions: []Restriction{
+			Restriction{
+				Name: "website only",
+				Rules: []RestrictionRule{
+					RestrictionRule{
+						Name:     "mywebsite.com",
+						Referrer: "www.mywebsite.com",
+					},
+				},
+			},
+		},
+		Caching: []CacheRule{
+			CacheRule{
+				Name: "default",
+				TTL:  3600,
+			},
+		},
+		FlavorID: "cdn",
+	}
 
-  expected := "https://global.cdn.api.rackspacecloud.com/v1.0/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0"
-  actual, err := Create(fake.ServiceClient(), createOpts).Extract()
-  th.AssertNoErr(t, err)
-  th.AssertEquals(t, expected, actual)
+	expected := "https://global.cdn.api.rackspacecloud.com/v1.0/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0"
+	actual, err := Create(fake.ServiceClient(), createOpts).Extract()
+	th.AssertNoErr(t, err)
+	th.AssertEquals(t, expected, actual)
 }
 
 func TestGet(t *testing.T) {
-  th.SetupHTTP()
-  defer th.TeardownHTTP()
+	th.SetupHTTP()
+	defer th.TeardownHTTP()
 
-  HandleGetCDNServiceSuccessfully(t)
+	HandleGetCDNServiceSuccessfully(t)
 
-  expected := &Service{
-    ID:   "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0",
-    Name: "mywebsite.com",
-    Domains: []Domain{
-      Domain{
-        Domain: "www.mywebsite.com",
-        Protocol: "http",
-      },
-    },
-    Origins: []Origin{
-      Origin{
-        Origin: "mywebsite.com",
-        Port:   80,
-        SSL:    false,
-      },
-    },
-    Caching: []CacheRule{
-      CacheRule{
-        Name: "default",
-        TTL:  3600,
-      },
-      CacheRule{
-        Name: "home",
-        TTL:  17200,
-        Rules: []TTLRule{
-          TTLRule{
-            Name:       "index",
-            RequestURL: "/index.htm",
-          },
-        },
-      },
-      CacheRule{
-        Name: "images",
-        TTL:  12800,
-        Rules: []TTLRule{
-          TTLRule{
-            Name:       "images",
-            RequestURL: "*.png",
-          },
-        },
-      },
-    },
-    Restrictions: []Restriction{
-      Restriction{
-        Name: "website only",
-        Rules: []RestrictionRule{
-          RestrictionRule{
-            Name:     "mywebsite.com",
-            Referrer: "www.mywebsite.com",
-          },
-        },
-      },
-    },
-    FlavorID: "cdn",
-    Status:   "deployed",
-    Errors:   []Error{},
-    Links: []gophercloud.Link{
-      gophercloud.Link{
-        Href: "https://global.cdn.api.rackspacecloud.com/v1.0/110011/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0",
-        Rel:  "self",
-      },
-      gophercloud.Link{
-        Href: "blog.mywebsite.com.cdn1.raxcdn.com",
-        Rel:  "access_url",
-      },
-      gophercloud.Link{
-        Href: "https://global.cdn.api.rackspacecloud.com/v1.0/110011/flavors/cdn",
-        Rel:  "flavor",
-      },
-    },
-  }
+	expected := &Service{
+		ID:   "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0",
+		Name: "mywebsite.com",
+		Domains: []Domain{
+			Domain{
+				Domain:   "www.mywebsite.com",
+				Protocol: "http",
+			},
+		},
+		Origins: []Origin{
+			Origin{
+				Origin: "mywebsite.com",
+				Port:   80,
+				SSL:    false,
+			},
+		},
+		Caching: []CacheRule{
+			CacheRule{
+				Name: "default",
+				TTL:  3600,
+			},
+			CacheRule{
+				Name: "home",
+				TTL:  17200,
+				Rules: []TTLRule{
+					TTLRule{
+						Name:       "index",
+						RequestURL: "/index.htm",
+					},
+				},
+			},
+			CacheRule{
+				Name: "images",
+				TTL:  12800,
+				Rules: []TTLRule{
+					TTLRule{
+						Name:       "images",
+						RequestURL: "*.png",
+					},
+				},
+			},
+		},
+		Restrictions: []Restriction{
+			Restriction{
+				Name: "website only",
+				Rules: []RestrictionRule{
+					RestrictionRule{
+						Name:     "mywebsite.com",
+						Referrer: "www.mywebsite.com",
+					},
+				},
+			},
+		},
+		FlavorID: "cdn",
+		Status:   "deployed",
+		Errors:   []Error{},
+		Links: []gophercloud.Link{
+			gophercloud.Link{
+				Href: "https://global.cdn.api.rackspacecloud.com/v1.0/110011/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0",
+				Rel:  "self",
+			},
+			gophercloud.Link{
+				Href: "blog.mywebsite.com.cdn1.raxcdn.com",
+				Rel:  "access_url",
+			},
+			gophercloud.Link{
+				Href: "https://global.cdn.api.rackspacecloud.com/v1.0/110011/flavors/cdn",
+				Rel:  "flavor",
+			},
+		},
+	}
 
-
-  actual, err := Get(fake.ServiceClient(), "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0").Extract()
-  th.AssertNoErr(t, err)
-  th.AssertDeepEquals(t, expected, actual)
+	actual, err := Get(fake.ServiceClient(), "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0").Extract()
+	th.AssertNoErr(t, err)
+	th.AssertDeepEquals(t, expected, actual)
 }
 
 func TestSuccessfulUpdate(t *testing.T) {
-  th.SetupHTTP()
-  defer th.TeardownHTTP()
-
-  HandleUpdateCDNServiceSuccessfully(t)
-
-  expected := "https://www.poppycdn.io/v1.0/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0"
-  updateOpts := UpdateOpts{
-    UpdateOpt{
-      Op: Replace,
-      Path: "/origins/0",
-      Value: map[string]interface{}{
-        "origin": "44.33.22.11",
-        "port": 80,
-        "ssl": false,
-      },
-    },
-    UpdateOpt{
-      Op: Add,
-      Path: "/domains/0",
-      Value: map[string]interface{}{
-        "domain": "added.mocksite4.com",
-      },
-    },
-  }
-  actual, err := Update(fake.ServiceClient(), "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0", updateOpts).Extract()
-  th.AssertNoErr(t, err)
-  th.AssertEquals(t, expected, actual)
-}
-
-func TestUnsuccessfulUpdate(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()
 
 	HandleUpdateCDNServiceSuccessfully(t)
 
-	updateOpts := UpdateOpts{
-		UpdateOpt{
-			Op: "Foo",
-			Path: "/origins/0",
-			Value: map[string]interface{}{
-				"origin": "44.33.22.11",
-				"port": 80,
-				"ssl": false,
+	expected := "https://www.poppycdn.io/v1.0/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0"
+	ops := []Patch{
+		Replacement{
+			Value: Origin{
+				Origin: "44.33.22.11",
+				Port:   80,
+				SSL:    false,
 			},
+			Index: 0,
 		},
-		UpdateOpt{
-			Op: Add,
-			Path: "/domains/0",
-			Value: map[string]interface{}{
-				"domain": "added.mocksite4.com",
-			},
+		Addition{
+			Value: Domain{Domain: "added.mocksite4.com"},
 		},
 	}
-	_, err := Update(fake.ServiceClient(), "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0", updateOpts).Extract()
-	if err == nil {
-		t.Errorf("Expected error during TestUnsuccessfulUpdate but didn't get one.")
-	}
+
+	actual, err := Update(fake.ServiceClient(), "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0", ops).Extract()
+	th.AssertNoErr(t, err)
+	th.AssertEquals(t, expected, actual)
 }
 
 func TestDelete(t *testing.T) {
-  th.SetupHTTP()
-  defer th.TeardownHTTP()
+	th.SetupHTTP()
+	defer th.TeardownHTTP()
 
-  HandleDeleteCDNServiceSuccessfully(t)
+	HandleDeleteCDNServiceSuccessfully(t)
 
-  err := Delete(fake.ServiceClient(), "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0").ExtractErr()
-  th.AssertNoErr(t, err)
+	err := Delete(fake.ServiceClient(), "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0").ExtractErr()
+	th.AssertNoErr(t, err)
 }
