diff --git a/dm/DM.cpp b/dm/DM.cpp
index ae54405..e90a3f5 100644
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -171,16 +171,10 @@
 
 static Sink* create_via(const char* tag, Sink* wrapped) {
 #define VIA(t, via, ...) if (0 == strcmp(t, tag)) { return new via(__VA_ARGS__); }
+    VIA("pipe",      ViaPipe,          wrapped);
     VIA("serialize", ViaSerialization, wrapped);
-
-    VIA("tiles",    ViaTiles, 256, 256,               NULL, wrapped);
-    VIA("tiles_rt", ViaTiles, 256, 256, new SkRTreeFactory, wrapped);
-
-    const int xp = SkGPipeWriter::kCrossProcess_Flag,
-              sa = xp | SkGPipeWriter::kSharedAddressSpace_Flag;
-    VIA("pipe",    ViaPipe,  0, wrapped);
-    VIA("pipe_xp", ViaPipe, xp, wrapped);
-    VIA("pipe_sa", ViaPipe, sa, wrapped);
+    VIA("tiles",     ViaTiles, 256, 256,               NULL, wrapped);
+    VIA("tiles_rt",  ViaTiles, 256, 256, new SkRTreeFactory, wrapped);
 
     if (FLAGS_matrix.count() == 9) {
         SkMatrix m;
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
index fd99435..9be17d1 100644
--- a/dm/DMSrcSink.cpp
+++ b/dm/DMSrcSink.cpp
@@ -230,25 +230,25 @@
 
 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 
-ViaPipe::ViaPipe(int flags, Sink* sink) : fFlags((SkGPipeWriter::Flags)flags), fSink(sink) {}
+ViaPipe::ViaPipe(Sink* sink) : fSink(sink) {}
 
 Error ViaPipe::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream) const {
-    // We turn our arguments into a Src, then draw that Src into our Sink to fill bitmap or stream.
+    // We turn ourselves into another Src that draws our argument into bitmap/stream via pipe.
     struct ProxySrc : public Src {
         const Src& fSrc;
-        SkGPipeWriter::Flags fFlags;
-        ProxySrc(const Src& src, SkGPipeWriter::Flags flags) : fSrc(src), fFlags(flags) {}
+        ProxySrc(const Src& src) : fSrc(src) {}
 
         Error draw(SkCanvas* canvas) const SK_OVERRIDE {
             SkISize size = this->size();
             // TODO: is DecodeMemory really required? Might help RAM usage to be lazy if we can.
             PipeController controller(canvas, &SkImageDecoder::DecodeMemory);
             SkGPipeWriter pipe;
-            return fSrc.draw(pipe.startRecording(&controller, fFlags, size.width(), size.height()));
+            const uint32_t kFlags = 0; // We mirror SkDeferredCanvas, which doesn't use any flags.
+            return fSrc.draw(pipe.startRecording(&controller, kFlags, size.width(), size.height()));
         }
         SkISize size() const SK_OVERRIDE { return fSrc.size(); }
         Name name() const SK_OVERRIDE { sk_throw(); return ""; }  // No one should be calling this.
-    } proxy(src, fFlags);
+    } proxy(src);
     return fSink->draw(proxy, bitmap, stream);
 }
 
diff --git a/dm/DMSrcSink.h b/dm/DMSrcSink.h
index df92ff3..31c3130 100644
--- a/dm/DMSrcSink.h
+++ b/dm/DMSrcSink.h
@@ -133,13 +133,12 @@
 
 class ViaPipe : public Sink {
 public:
-    ViaPipe(int flags, Sink*);
+    explicit ViaPipe(Sink*);
 
     Error draw(const Src&, SkBitmap*, SkWStream*) const SK_OVERRIDE;
     int enclave() const SK_OVERRIDE { return fSink->enclave(); }
     const char* fileExtension() const SK_OVERRIDE { return fSink->fileExtension(); }
 private:
-    SkGPipeWriter::Flags fFlags;
     SkAutoTDelete<Sink>  fSink;
 };
 
