diff --git a/gm/gm.h b/gm/gm.h
index 97b21d97..4072f10 100644
--- a/gm/gm.h
+++ b/gm/gm.h
@@ -31,7 +31,8 @@
                 
         enum Flags {
             kSkipPDF_Flag       = 1 << 0,
-            kSkipPicture_Flag   = 1 << 1
+            kSkipPicture_Flag   = 1 << 1,
+            kSkipPipe_Flag      = 1 << 2
         };
 
         void draw(SkCanvas*);
diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp
index 61a0859..760262c 100644
--- a/gm/gmmain.cpp
+++ b/gm/gmmain.cpp
@@ -13,6 +13,7 @@
 #include "SkData.h"
 #include "SkDeferredCanvas.h"
 #include "SkDevice.h"
+#include "SkGPipe.h"
 #include "SkGpuCanvas.h"
 #include "SkGpuDevice.h"
 #include "SkGraphics.h"
@@ -615,6 +616,67 @@
     }
 }
 
+class PipeController : public SkGPipeController {
+public:
+    PipeController(SkCanvas* target);
+    ~PipeController();
+    virtual void* requestBlock(size_t minRequest, size_t* actual);
+    virtual void notifyWritten(size_t bytes);
+private:
+    SkGPipeReader fReader;
+    void* fBlock;
+    size_t fBlockSize;
+    size_t fBytesWritten;
+    SkGPipeReader::Status fStatus;
+};
+
+PipeController::PipeController(SkCanvas* target)
+:fReader(target) {
+    fBlock = NULL;
+    fBlockSize = fBytesWritten = 0;
+}
+
+PipeController::~PipeController() {
+    sk_free(fBlock);
+}
+
+void* PipeController::requestBlock(size_t minRequest, size_t *actual) {
+    sk_free(fBlock);
+    fBlockSize = minRequest * 4;
+    fBlock = sk_malloc_throw(fBlockSize);
+    fBytesWritten = 0;
+    *actual = fBlockSize;
+    return fBlock;
+}
+
+void PipeController::notifyWritten(size_t bytes) {
+    fStatus = fReader.playback((const char*)fBlock + fBytesWritten, bytes);
+    SkASSERT(SkGPipeReader::kError_Status != fStatus);
+    fBytesWritten += bytes;
+}
+
+static ErrorBitfield test_pipe_playback(GM* gm,
+                                        const ConfigData& gRec,
+                                        const SkBitmap& comparisonBitmap,
+                                        const char readPath [],
+                                        const char diffPath []) {
+    if (kRaster_Backend != gRec.fBackend) {
+        return ERROR_NONE;
+    }
+    SkBitmap bitmap;
+    SkISize size = gm->getISize();
+    setup_bitmap(gRec, size, &bitmap);
+    SkCanvas canvas(bitmap);
+    PipeController pipeController(&canvas);
+    SkGPipeWriter writer;
+    SkCanvas* pipeCanvas = writer.startRecording(&pipeController,
+            SkGPipeWriter::kCrossProcess_Flag);
+    invokeGM(gm, pipeCanvas);
+    writer.endRecording();
+    return handle_test_results(gm, gRec, NULL, NULL, diffPath,
+                               "-pipe", bitmap, NULL, &comparisonBitmap);
+}
+
 static void write_picture_serialization(GM* gm, const ConfigData& rec,
                                         const char writePicturePath[]) {
     // only do this once, so we pick raster
@@ -635,7 +697,7 @@
 static void usage(const char * argv0) {
     SkDebugf(
         "%s [-w writePath] [-r readPath] [-d diffPath] [-i resourcePath]\n"
-        "    [--noreplay] [--serialize] [--forceBWtext] [--nopdf] \n"
+        "    [--noreplay] [--nopipe] [--serialize] [--forceBWtext] [--nopdf] \n"
         "    [--nodeferred] [--match substring] [--notexturecache]\n"
         , argv0);
     SkDebugf("    writePath: directory to write rendered images in.\n");
@@ -645,6 +707,7 @@
     SkDebugf("    diffPath: directory to write difference images in.\n");
     SkDebugf("    resourcePath: directory that stores image resources.\n");
     SkDebugf("    --noreplay: do not exercise SkPicture replay.\n");
+    SkDebugf("    --nopipe: Skip SkGPipe replay.\n");
     SkDebugf(
 "    --serialize: exercise SkPicture serialization & deserialization.\n");
     SkDebugf("    --forceBWtext: disable text anti-aliasing.\n");
@@ -755,6 +818,7 @@
 
     bool doPDF = true;
     bool doReplay = true;
+    bool doPipe = true;
     bool doSerialize = false;
     bool useDebugGL = false;
     bool doDeferred = true;
@@ -792,6 +856,8 @@
             }
         } else if (strcmp(*argv, "--forceBWtext") == 0) {
             gForceBWtext = true;
+        } else if (strcmp(*argv, "--nopipe") == 0) {
+            doPipe = false;
         } else if (strcmp(*argv, "--noreplay") == 0) {
             doReplay = false;
         } else if (strcmp(*argv, "--nopdf") == 0) {
@@ -931,6 +997,13 @@
                                                     readPath, diffPath);
             }
 
+            if ((ERROR_NONE == testErrors) && doPipe &&
+                !(gmFlags & GM::kSkipPipe_Flag)) {
+                testErrors |= test_pipe_playback(gm, gRec[i],
+                                                 forwardRenderedBitmap,
+                                                 readPath, diffPath);
+            }
+
             if ((ERROR_NONE == testErrors) && doSerialize  &&
                 !(gmFlags & GM::kSkipPicture_Flag)) {
                 testErrors |= test_picture_serialization(gm, gRec[i],
diff --git a/gm/samplerstress.cpp b/gm/samplerstress.cpp
index 687c636..b5c0069 100644
--- a/gm/samplerstress.cpp
+++ b/gm/samplerstress.cpp
@@ -105,6 +105,12 @@
         return make_isize(640, 480);
     }
 
+    virtual uint32_t onGetFlags() const SK_OVERRIDE {
+        // Skip Pipe playback since we use a custom MaskFilter that will not be
+        // flattened correctly
+        return this->INHERITED::onGetFlags() | GM::kSkipPipe_Flag;
+    }
+
     /**
      * Create a red & green stripes on black texture
      */
diff --git a/gyp/SampleApp.gyp b/gyp/SampleApp.gyp
index 0c370ab..c426508 100644
--- a/gyp/SampleApp.gyp
+++ b/gyp/SampleApp.gyp
@@ -8,7 +8,6 @@
       'include_dirs' : [
         '../src/core', # needed to get SkConcaveToTriangle, maybe this should be moved to include dir?
         '../gm',       # needed to pull gm.h
-        '../include/pipe', # To pull in SkGPipe.h for pipe reader/writer
         '../samplecode', # To pull SampleApp.h and SampleCode.h
         '../src/gpu', # To pull gl/GrGLUtil.h
       ],
@@ -111,11 +110,7 @@
         '../samplecode/SampleXfermodes.cpp',
         '../samplecode/SampleXfermodesBlur.cpp',
         '../samplecode/TransitionView.cpp',
-        
-        # Dependencies for the pipe code in SampleApp
-        '../src/pipe/SkGPipeRead.cpp',
-        '../src/pipe/SkGPipeWrite.cpp',
-        
+     
         # DrawingBoard
         #'../experimental/DrawingBoard/SkColorPalette.h',
         #'../experimental/DrawingBoard/SkColorPalette.cpp',
diff --git a/gyp/core.gyp b/gyp/core.gyp
index 6d5cd13..aea2a73 100644
--- a/gyp/core.gyp
+++ b/gyp/core.gyp
@@ -149,6 +149,8 @@
         '../src/core/SkUtils.cpp',
         '../src/core/SkWriter32.cpp',
         '../src/core/SkXfermode.cpp',
+        '../src/pipe/SkGPipeRead.cpp',
+        '../src/pipe/SkGPipeWrite.cpp',
 
         '../include/core/Sk64.h',
         '../include/core/SkAdvancedTypefaceMetrics.h',
@@ -241,6 +243,7 @@
       'include_dirs': [
         '../include/config',
         '../include/core',
+        '../include/pipe',
         '../include/ports',
         '../include/xml',
         '../src/core',
@@ -318,6 +321,7 @@
           'config',
           '../include/config',
           '../include/core',
+          '../include/pipe',
           'ext',
         ],
       },
diff --git a/gyp/gm.gyp b/gyp/gm.gyp
index b333130..980c199 100644
--- a/gyp/gm.gyp
+++ b/gyp/gm.gyp
@@ -24,8 +24,8 @@
         'gpu.gyp:gr',
         'gpu.gyp:skgr',
         'images.gyp:images',
-        'ports.gyp:ports',
         'pdf.gyp:pdf',
+        'ports.gyp:ports',
         'utils.gyp:utils',        
       ],
       'conditions': [
diff --git a/src/pipe/SkGPipeWrite.cpp b/src/pipe/SkGPipeWrite.cpp
index 08c6f49..5d35988 100644
--- a/src/pipe/SkGPipeWrite.cpp
+++ b/src/pipe/SkGPipeWrite.cpp
@@ -67,9 +67,9 @@
     if (writer) {
         writer->write32(size);
         SkAutoDataUnref data(stream.copyToData());
-        writer->write(data.data(), size);
+        writer->writePad(data.data(), size);
     }
-    return 4 + size;
+    return 4 + SkAlign4(size);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
