diff --git a/pkg/kube/client.go b/pkg/kube/client.go
index 9498d4a41ab5862a0e56f272990ae26582dba924..47832e34a45661964c52fb1028df91c0453b0f25 100644
--- a/pkg/kube/client.go
+++ b/pkg/kube/client.go
@@ -219,7 +219,7 @@ func (c *Client) Update(namespace string, originalReader, targetReader io.Reader
 
 	for _, info := range original.Difference(target) {
 		log.Printf("Deleting %s in %s...", info.Name, info.Namespace)
-		if err := deleteResource(info); err != nil {
+		if err := deleteResource(c, info); err != nil {
 			log.Printf("Failed to delete %s, err: %s", info.Name, err)
 		}
 	}
@@ -232,20 +232,7 @@ func (c *Client) Update(namespace string, originalReader, targetReader io.Reader
 func (c *Client) Delete(namespace string, reader io.Reader) error {
 	return perform(c, namespace, reader, func(info *resource.Info) error {
 		log.Printf("Starting delete for %s %s", info.Name, info.Mapping.GroupVersionKind.Kind)
-
-		reaper, err := c.Reaper(info.Mapping)
-		if err != nil {
-			// If there is no reaper for this resources, delete it.
-			if kubectl.IsNoSuchReaperError(err) {
-				err := resource.NewHelper(info.Client, info.Mapping).Delete(info.Namespace, info.Name)
-				return skipIfNotFound(err)
-			}
-
-			return err
-		}
-
-		log.Printf("Using reaper for deleting %s", info.Name)
-		err = reaper.Stop(info.Namespace, info.Name, 0, nil)
+		err := deleteResource(c, info)
 		return skipIfNotFound(err)
 	})
 }
@@ -303,8 +290,17 @@ func createResource(info *resource.Info) error {
 	return err
 }
 
-func deleteResource(info *resource.Info) error {
-	return resource.NewHelper(info.Client, info.Mapping).Delete(info.Namespace, info.Name)
+func deleteResource(c *Client, info *resource.Info) error {
+	reaper, err := c.Reaper(info.Mapping)
+	if err != nil {
+		// If there is no reaper for this resources, delete it.
+		if kubectl.IsNoSuchReaperError(err) {
+			return resource.NewHelper(info.Client, info.Mapping).Delete(info.Namespace, info.Name)
+		}
+		return err
+	}
+	log.Printf("Using reaper for deleting %s", info.Name)
+	return reaper.Stop(info.Namespace, info.Name, 0, nil)
 }
 
 func updateResource(c *Client, target *resource.Info, currentObj runtime.Object, recreate bool) error {
diff --git a/pkg/kube/client_test.go b/pkg/kube/client_test.go
index 08eb9a0cbb9d2dcbb928c811974a3a57ddf10342..c137be4402d0efbfdf15ebd48f67164e3673f003 100644
--- a/pkg/kube/client_test.go
+++ b/pkg/kube/client_test.go
@@ -23,13 +23,18 @@ import (
 	"net/http"
 	"strings"
 	"testing"
+	"time"
 
 	"k8s.io/kubernetes/pkg/api"
+	"k8s.io/kubernetes/pkg/api/meta"
 	"k8s.io/kubernetes/pkg/api/testapi"
 	"k8s.io/kubernetes/pkg/api/unversioned"
 	"k8s.io/kubernetes/pkg/api/validation"
 	"k8s.io/kubernetes/pkg/client/restclient/fake"
+	"k8s.io/kubernetes/pkg/kubectl"
 	cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing"
+	cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
+
 	"k8s.io/kubernetes/pkg/kubectl/resource"
 	"k8s.io/kubernetes/pkg/runtime"
 )
@@ -79,6 +84,24 @@ func newResponse(code int, obj runtime.Object) (*http.Response, error) {
 	return &http.Response{StatusCode: code, Header: header, Body: body}, nil
 }
 
+type fakeReaper struct {
+	name string
+}
+
+func (r *fakeReaper) Stop(namespace, name string, timeout time.Duration, gracePeriod *api.DeleteOptions) error {
+	r.name = name
+	return nil
+}
+
+type fakeReaperFactory struct {
+	cmdutil.Factory
+	reaper kubectl.Reaper
+}
+
+func (f *fakeReaperFactory) Reaper(mapping *meta.RESTMapping) (kubectl.Reaper, error) {
+	return f.reaper, nil
+}
+
 func TestUpdate(t *testing.T) {
 	listA := newPodList("starfish", "otter", "squid")
 	listB := newPodList("starfish", "otter", "dolphin")
@@ -92,6 +115,7 @@ func TestUpdate(t *testing.T) {
 		Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) {
 			p, m := req.URL.Path, req.Method
 			actions[p] = m
+			t.Logf("got request %s %s", p, m)
 			switch {
 			case p == "/namespaces/default/pods/starfish" && m == "GET":
 				return newResponse(200, &listA.Items[0])
@@ -121,7 +145,9 @@ func TestUpdate(t *testing.T) {
 		}),
 	}
 
-	c := &Client{Factory: f}
+	reaper := &fakeReaper{}
+	rf := &fakeReaperFactory{Factory: f, reaper: reaper}
+	c := &Client{Factory: rf}
 	if err := c.Update(api.NamespaceDefault, objBody(codec, &listA), objBody(codec, &listB), false); err != nil {
 		t.Fatal(err)
 	}
@@ -131,7 +157,6 @@ func TestUpdate(t *testing.T) {
 		"/namespaces/default/pods/otter":    "GET",
 		"/namespaces/default/pods/starfish": "PATCH",
 		"/namespaces/default/pods":          "POST",
-		"/namespaces/default/pods/squid":    "DELETE",
 	}
 
 	for k, v := range expectedActions {
@@ -139,6 +164,11 @@ func TestUpdate(t *testing.T) {
 			t.Errorf("expected a %s request to %s", k, v)
 		}
 	}
+
+	if reaper.name != "squid" {
+		t.Errorf("unexpected reaper: %#v", reaper)
+	}
+
 }
 
 func TestPerform(t *testing.T) {