def dump_arg_instance(self, function, arg):
         # Dump shaders as strings
         if function.name in ('CreateVertexShader', 'CreatePixelShader') and arg.name == 'pFunction':
-            print '    DumpShader(%s);' % (arg.name)
+            print '    DumpShader(__writer, %s);' % (arg.name)
             return
 
         DllTracer.dump_arg_instance(self, function, arg)
 
     def dump_arg_instance(self, function, arg):
         # Dump shaders as strings
         if function.name in ('CreateVertexShader', 'CreatePixelShader') and arg.name == 'pFunction':
-            print '    DumpShader(%s);' % (arg.name)
+            print '    DumpShader(__writer, %s);' % (arg.name)
             return
 
         DllTracer.dump_arg_instance(self, function, arg)
 
 
 #include <stdio.h>
 
-#include "trace_writer.hpp"
 #include "d3d9imports.hpp"
 #include "d3dshader.hpp"
 
 );
 
 
-void DumpShader(const DWORD *tokens)
+void DumpShader(Trace::Writer &writer, const DWORD *tokens)
 {
     static BOOL firsttime = TRUE;
     static HMODULE hD3DXModule = NULL;
 
         hr = pfnD3DXDisassembleShader( (DWORD *)tokens, FALSE, NULL, &pDisassembly);
         if (hr == D3D_OK) {
-            Trace::LiteralString((const char *)pDisassembly->GetBufferPointer());
+            writer.writeString((const char *)pDisassembly->GetBufferPointer());
         }
 
         if (pDisassembly) {
         }
     }
 
-    Trace::LiteralOpaque(tokens);
+    writer.writeOpaque(tokens);
 }
 
 
 #include <windows.h>
 
-void DumpShader(const DWORD *tokens);
+#include "trace_writer.hpp"
+
+void DumpShader(Trace::Writer &writer, const DWORD *tokens);
 
 
 #endif /* _D3DSHADER_HPP_ */