diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index f455984..de36307 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -217,20 +217,15 @@
 // It does not reset stage textures/samplers or per-vertex-edge-aa state since
 // they aren't used unless the vertex layout references them.
 // It also doesn't set the render target.
-void reset_target_state(GrDrawTarget* target){
-        GrDrawState* drawState = target->drawState();
+void reset_draw_state(GrDrawState* drawState){
 
         drawState->setViewMatrix(GrMatrix::I());
         drawState->setColorFilter(0, SkXfermode::kDst_Mode);
-        drawState->disableState(GrDrawState::kDither_StateBit |
-                                GrDrawState::kHWAntialias_StateBit |
-                                GrDrawState::kClip_StateBit |
-                                GrDrawState::kNoColorWrites_StateBit |
-                                GrDrawState::kEdgeAAConcave_StateBit);
+        drawState->resetStateFlags();
         drawState->setEdgeAAData(NULL, 0);
         drawState->disableStencil();
         drawState->setAlpha(0xFF);
-        target->setBlendFunc(kOne_BlendCoeff,
+        drawState->setBlendFunc(kOne_BlendCoeff,
                            kZero_BlendCoeff);
         drawState->setFirstCoverageStage(GrDrawState::kNumStages);
         drawState->setDrawFace(GrDrawState::kBoth_DrawFace);
@@ -354,8 +349,8 @@
 
         if (NULL != texture) {
             GrDrawTarget::AutoStateRestore asr(fGpu);
-            reset_target_state(fGpu);
             GrDrawState* drawState = fGpu->drawState();
+            reset_draw_state(drawState);
             drawState->setRenderTarget(texture->asRenderTarget());
             drawState->setTexture(0, clampEntry.texture());
 
@@ -1779,8 +1774,8 @@
         GrAssert(NULL != target);
 
         GrDrawTarget::AutoStateRestore asr(fGpu);
-        reset_target_state(fGpu);
         GrDrawState* drawState = fGpu->drawState();
+        reset_draw_state(drawState);
         drawState->setRenderTarget(target);
 
         GrMatrix matrix;
@@ -1817,8 +1812,8 @@
     ASSERT_OWNED_RESOURCE(src);
 
     GrDrawTarget::AutoStateRestore asr(fGpu);
-    reset_target_state(fGpu);
     GrDrawState* drawState = fGpu->drawState();
+    reset_draw_state(drawState);
     drawState->setRenderTarget(dst);
     GrSamplerState sampler(GrSamplerState::kClamp_WrapMode,
                            GrSamplerState::kNearest_Filter);
@@ -1888,8 +1883,8 @@
                                      config, buffer, rowBytes, flags);
 
     GrDrawTarget::AutoStateRestore  asr(fGpu);
-    reset_target_state(fGpu);
     GrDrawState* drawState = fGpu->drawState();
+    reset_draw_state(drawState);
 
     GrMatrix matrix;
     matrix.setTranslate(GrIntToScalar(left), GrIntToScalar(top));
@@ -1949,7 +1944,7 @@
     } else {
         drawState->disableState(GrDrawState::kHWAntialias_StateBit);
     }
-    target->setBlendFunc(paint.fSrcBlendCoeff, paint.fDstBlendCoeff);
+    drawState->setBlendFunc(paint.fSrcBlendCoeff, paint.fDstBlendCoeff);
     drawState->setColorFilter(paint.fColorFilterColor, paint.fColorFilterXfermode);
 
     if (paint.getActiveMaskStageMask() && !target->canApplyCoverage()) {
@@ -2155,7 +2150,7 @@
     drawState->setViewMatrix(GrMatrix::I());
     drawState->setTexture(0, texture);
     drawState->setAlpha(0xFF);
-    fGpu->setBlendFunc(kOne_BlendCoeff, kZero_BlendCoeff);
+    drawState->setBlendFunc(kOne_BlendCoeff, kZero_BlendCoeff);
     fGpu->drawSimpleRect(rect, NULL, 1 << 0);
 }
 
diff --git a/src/gpu/GrDrawTarget.h b/src/gpu/GrDrawTarget.h
index 262f72c..aabf813 100644
--- a/src/gpu/GrDrawTarget.h
+++ b/src/gpu/GrDrawTarget.h
@@ -89,10 +89,6 @@
     const GrDrawState& getDrawState() const { return fCurrDrawState; }
     GrDrawState* drawState() { return &fCurrDrawState; }
 
-    void setBlendFunc(GrBlendCoeff srcCoeff, GrBlendCoeff dstCoeff) {
-        this->drawState()->setBlendFunc(srcCoeff, dstCoeff);
-    }
-
     /**
      * Shortcut for drawState()->preConcatSamplerMatrices() on all enabled
      * stages
diff --git a/src/gpu/GrTextContext.cpp b/src/gpu/GrTextContext.cpp
index 3b3841b..48cddab 100644
--- a/src/gpu/GrTextContext.cpp
+++ b/src/gpu/GrTextContext.cpp
@@ -50,13 +50,13 @@
             }
             // setup blend so that we get mask * paintColor + (1-mask)*dstColor
             drawState->setBlendConstant(fPaint.fColor);
-            fDrawTarget->setBlendFunc(kConstC_BlendCoeff, kISC_BlendCoeff);
+            drawState->setBlendFunc(kConstC_BlendCoeff, kISC_BlendCoeff);
             // don't modulate by the paint's color in the frag since we're
             // already doing it via the blend const.
             drawState->setColor(0xffffffff);
         } else {
             // set back to normal in case we took LCD path previously.
-            fDrawTarget->setBlendFunc(fPaint.fSrcBlendCoeff, fPaint.fDstBlendCoeff);
+            drawState->setBlendFunc(fPaint.fSrcBlendCoeff, fPaint.fDstBlendCoeff);
             drawState->setColor(fPaint.fColor);
         }
 
