diff --git a/Makefile b/Makefile
index 8513cb7..afb6cad 100644
--- a/Makefile
+++ b/Makefile
@@ -24,25 +24,28 @@
 	npm install
 	touch node_modules
 
-# Link a local copy of veyron.js.
-# TODO(nlacasse): Remove this and put veyron.js in package.json once we can get
+# Link a local copy of vanadium.js.
+# TODO(nlacasse): Remove this and put vanadium.js in package.json once we can get
 # it from npm
-browser/third-party/npm/veyronjs@0.0.1: node_modules
+browser/third-party/npm/vanadium@0.0.1: node_modules
 	cd $(VANADIUM_ROOT)/release/javascript/core && \
-	jspm link -y npm:veyronjs@0.0.1
+	jspm link -y npm:vanadium@0.0.1
 	cd browser && \
-	jspm install -y -link npm:veyronjs
+	jspm install -y -link npm:vanadium
 
 # Install JSPM and Bower packages as listed in browser/package.json from JSPM and browser/bower.json from bower
-browser/third-party: browser/third-party/npm/veyronjs@0.0.1 browser/package.json browser/bower.json node_modules
+browser/third-party: browser/third-party/npm/vanadium@0.0.1 browser/package.json browser/bower.json node_modules
 	cd browser && \
 	jspm install -y && \
 	bower prune && \
 	bower install
 	touch browser/third-party
 
+browser/services/vdl/index.js:
+	v23 run vdl generate --lang=javascript --js_out_dir=browser/services p2b/vdl
+
 # Bundle whole app and third-party JavaScript into a single build.js
-browser/build.js: $(JS_FILES) browser/third-party node_modules
+browser/build.js: $(JS_FILES) browser/services/vdl/index.js  browser/third-party node_modules
 	cd browser; \
 	jspm setmode local; \
 	jspm bundle app build.js
@@ -69,7 +72,7 @@
 	rm -rf browser/build.js
 	rm -rf browser/index.html
 	rm -rf browser/third-party
-	rm -rf go/bin
+	rm -rf go/{bin,pkg}
 	rm -rf node_modules
 
 .PHONY: start clean watch test
diff --git a/browser/config.js b/browser/config.js
index bd947ec..660e2dd 100644
--- a/browser/config.js
+++ b/browser/config.js
@@ -20,7 +20,7 @@
     "npm:event-stream": "npm:event-stream@3.2.2",
     "npm:humanize": "npm:humanize@0.0.9",
     "stream": "github:jspm/nodelibs-stream@0.1.0",
-    "veyronjs": "npm:veyronjs@0.0.1",
+    "vanadium": "npm:vanadium@0.0.1",
     "github:jspm/nodelibs-assert@0.1.0": {
       "assert": "npm:assert@1.3.0"
     },
@@ -57,7 +57,7 @@
       "path-browserify": "npm:path-browserify@0.0.0"
     },
     "github:jspm/nodelibs-process@0.1.1": {
-      "process": "npm:process@0.10.0"
+      "process": "npm:process@0.10.1"
     },
     "github:jspm/nodelibs-punycode@0.1.0": {
       "punycode": "npm:punycode@1.3.2"
@@ -369,7 +369,7 @@
       "stream": "github:jspm/nodelibs-stream@0.1.0"
     },
     "npm:timers-browserify@1.3.0": {
-      "process": "npm:process@0.10.0"
+      "process": "npm:process@0.10.1"
     },
     "npm:url@0.10.2": {
       "assert": "github:jspm/nodelibs-assert@0.1.0",
@@ -381,7 +381,7 @@
       "inherits": "npm:inherits@2.0.1",
       "process": "github:jspm/nodelibs-process@0.1.1"
     },
-    "npm:veyronjs@0.0.1": {
+    "npm:vanadium@0.0.1": {
       "assert": "github:jspm/nodelibs-assert@0.1.0",
       "bluebird": "npm:bluebird@2.9.8",
       "buffer": "github:jspm/nodelibs-buffer@0.1.0",
@@ -391,6 +391,7 @@
       "crypto": "github:jspm/nodelibs-crypto@0.1.0",
       "dgram": "github:jspm/nodelibs-dgram@0.1.0",
       "dns": "github:jspm/nodelibs-dns@0.1.0",
+      "domready": "npm:domready@1.0.7",
       "es6-shim": "npm:es6-shim@0.20.4",
       "eventemitter2": "npm:eventemitter2@0.4.14",
       "events": "github:jspm/nodelibs-events@0.1.0",
diff --git a/browser/services/p2b/vdl/index.js b/browser/services/p2b/vdl/index.js
new file mode 100644
index 0000000..0019658
--- /dev/null
+++ b/browser/services/p2b/vdl/index.js
@@ -0,0 +1,79 @@
+// This file was auto-generated by the vanadium vdl tool.
+var vdl = require('vanadium').vdl;
+
+
+
+
+
+
+module.exports = {};
+
+
+
+// Types:
+var _type1 = new vdl.Type();
+_type1.kind = vdl.Kind.LIST;
+_type1.name = "";
+_type1.elem = vdl.Types.BYTE;
+_type1.freeze();
+
+
+
+
+// Consts:
+
+
+
+// Errors:
+
+
+
+// Services:
+
+  
+    
+function Viewer(){}
+module.exports.Viewer = Viewer
+
+    
+      
+Viewer.prototype.pipe = function(ctx) {
+  throw new Error('Method Pipe not implemented');
+};
+     
+
+    
+Viewer.prototype._serviceDescription = {
+  name: 'Viewer',
+  pkgPath: 'p2b/vdl',
+  doc: "// Viewer allows clients to stream data to it and to request a\n// particular viewer to format and display the data.",
+  embeds: [],
+  methods: [
+    
+      
+    {
+    name: 'Pipe',
+    doc: "// Pipe creates a bidirectional pipe between client and viewer\n// service, returns total number of bytes received by the service\n// after streaming ends",
+    inArgs: [],
+    outArgs: [{
+      name: '',
+      doc: "",
+      type: vdl.Types.ANY
+    },
+    ],
+    inStream: {
+      name: '',
+      doc: '',
+      type: _type1
+    },
+    outStream: null,
+    tags: []
+  },
+     
+  ]
+};
+
+   
+ 
+
+
diff --git a/browser/services/pipe-to-browser-client.js b/browser/services/pipe-to-browser-client.js
index f2c43c7..fc99da8 100644
--- a/browser/services/pipe-to-browser-client.js
+++ b/browser/services/pipe-to-browser-client.js
@@ -1,21 +1,21 @@
 /*
- * Implements a veyron client that can talk to a P2B service.
+ * Implements a vanadium client that can talk to a P2B service.
  * @fileoverview
  */
 import { Logger } from 'libs/logs/logger'
-import veyron from 'veyronjs'
+import vanadium from 'vanadium'
 
 var log = new Logger('services/p2b-client');
 
 /*
  * Pipes a stream of data to the P2B service identified
- * by the given veyron name.
+ * by the given vanadium name.
  * @param {string} name Veyron name of the destination service
  * @param {Stream} Stream of data to pipe to it.
  * @return {Promise} Promise indicating if piping was successful or not
  */
 export function pipe(name, stream) {
-  return veyron.init().then((runtime) => {
+  return vanadium.init().then((runtime) => {
     var client = runtime.newClient();
     var ctx = runtime.getContext().withTimeout(5000);
     ctx.waitUntilDone(function(){});
diff --git a/browser/services/pipe-to-browser-namespace.js b/browser/services/pipe-to-browser-namespace.js
index df1a7c0..5ef32f1 100644
--- a/browser/services/pipe-to-browser-namespace.js
+++ b/browser/services/pipe-to-browser-namespace.js
@@ -1,10 +1,10 @@
 /*
- * Implements a veyron client that talks to the namespace service and finds all
+ * Implements a vanadium client that talks to the namespace service and finds all
  * the P2B services that are available.
  * @fileoverview
  */
 import { Logger } from 'libs/logs/logger'
-import veyron from 'veyronjs'
+import vanadium from 'vanadium'
 
 var log = new Logger('services/p2b-namespace');
 
@@ -14,7 +14,7 @@
  * P2B services
  */
 export function getAll() {
-  return veyron.init().then((runtime) => {
+  return vanadium.init().then((runtime) => {
     var namespace = runtime.namespace();
     var ctx = runtime.getContext().withTimeout(5000);
     ctx.waitUntilDone(function(){});
diff --git a/browser/services/pipe-to-browser-server.js b/browser/services/pipe-to-browser-server.js
index 6229d37..019774d 100644
--- a/browser/services/pipe-to-browser-server.js
+++ b/browser/services/pipe-to-browser-server.js
@@ -8,7 +8,8 @@
 import { ByteObjectStreamAdapter } from 'libs/utils/byte-object-stream-adapter'
 import { StreamByteCounter } from 'libs/utils/stream-byte-counter'
 import { StreamCopy } from 'libs/utils/stream-copy'
-import veyron from 'veyronjs'
+import vanadium from 'vanadium'
+import vdl from 'services/p2b/vdl/index'
 
 var log = new Logger('services/p2b-server');
 var server;
@@ -46,11 +47,16 @@
  */
 export function publish(name, pipeRequestHandler) {
   log.debug('publishing under name:', name);
+
   /*
    * Veyron pipe to browser service implementation.
    * Implements the p2b VDL.
    */
-  var p2b = {
+  class Service extends vdl.Viewer {
+    constructor() {
+      super();
+    }
+
     pipe(ctx, $stream) {
       return new Promise(function(resolve, reject) {
         log.debug('received pipe request for:', ctx.suffix);
@@ -94,11 +100,13 @@
         }
       });
     }
-  };
+  }
+
+  var p2b = new Service();
 
   state.publishing = true;
 
-  return veyron.init().then((runtime) => {
+  return vanadium.init().then((runtime) => {
     server = runtime.newServer();
     var serviceName = 'google/p2b/' + name;
 
diff --git a/go/src/p2b/vdl/p2b.vdl.go b/go/src/p2b/vdl/p2b.vdl.go
index d6ec0c5..72c2474 100644
--- a/go/src/p2b/vdl/p2b.vdl.go
+++ b/go/src/p2b/vdl/p2b.vdl.go
@@ -110,17 +110,17 @@
 	Send(item []byte) error
 	Close() error
 } {
-	return implViewerPipeCallSend{c}
+	return implViewerPipeClientCallSend{c}
 }
 
-type implViewerPipeCallSend struct {
+type implViewerPipeClientCallSend struct {
 	c *implViewerPipeClientCall
 }
 
-func (c implViewerPipeCallSend) Send(item []byte) error {
+func (c implViewerPipeClientCallSend) Send(item []byte) error {
 	return c.c.Send(item)
 }
-func (c implViewerPipeCallSend) Close() error {
+func (c implViewerPipeClientCallSend) Close() error {
 	return c.c.CloseSend()
 }
 func (c *implViewerPipeClientCall) Finish() (o0 *vdl.Value, err error) {
@@ -137,7 +137,7 @@
 	// Pipe creates a bidirectional pipe between client and viewer
 	// service, returns total number of bytes received by the service
 	// after streaming ends
-	Pipe(ViewerPipeContext) (*vdl.Value, error)
+	Pipe(ViewerPipeServerCall) (*vdl.Value, error)
 }
 
 // ViewerServerStubMethods is the server interface containing
@@ -148,7 +148,7 @@
 	// Pipe creates a bidirectional pipe between client and viewer
 	// service, returns total number of bytes received by the service
 	// after streaming ends
-	Pipe(*ViewerPipeContextStub) (*vdl.Value, error)
+	Pipe(*ViewerPipeServerCallStub) (*vdl.Value, error)
 }
 
 // ViewerServerStub adds universal methods to ViewerServerStubMethods.
@@ -180,8 +180,8 @@
 	gs   *ipc.GlobState
 }
 
-func (s implViewerServerStub) Pipe(ctx *ViewerPipeContextStub) (*vdl.Value, error) {
-	return s.impl.Pipe(ctx)
+func (s implViewerServerStub) Pipe(call *ViewerPipeServerCallStub) (*vdl.Value, error) {
+	return s.impl.Pipe(call)
 }
 
 func (s implViewerServerStub) Globber() *ipc.GlobState {
@@ -227,46 +227,46 @@
 	}
 }
 
-// ViewerPipeContext represents the context passed to Viewer.Pipe.
-type ViewerPipeContext interface {
+// ViewerPipeServerCall represents the context passed to Viewer.Pipe.
+type ViewerPipeServerCall interface {
 	ipc.ServerCall
 	ViewerPipeServerStream
 }
 
-// ViewerPipeContextStub is a wrapper that converts ipc.StreamServerCall into
-// a typesafe stub that implements ViewerPipeContext.
-type ViewerPipeContextStub struct {
+// ViewerPipeServerCallStub is a wrapper that converts ipc.StreamServerCall into
+// a typesafe stub that implements ViewerPipeServerCall.
+type ViewerPipeServerCallStub struct {
 	ipc.StreamServerCall
 	valRecv []byte
 	errRecv error
 }
 
-// Init initializes ViewerPipeContextStub from ipc.StreamServerCall.
-func (s *ViewerPipeContextStub) Init(call ipc.StreamServerCall) {
+// Init initializes ViewerPipeServerCallStub from ipc.StreamServerCall.
+func (s *ViewerPipeServerCallStub) Init(call ipc.StreamServerCall) {
 	s.StreamServerCall = call
 }
 
 // RecvStream returns the receiver side of the Viewer.Pipe server stream.
-func (s *ViewerPipeContextStub) RecvStream() interface {
+func (s *ViewerPipeServerCallStub) RecvStream() interface {
 	Advance() bool
 	Value() []byte
 	Err() error
 } {
-	return implViewerPipeContextRecv{s}
+	return implViewerPipeServerCallRecv{s}
 }
 
-type implViewerPipeContextRecv struct {
-	s *ViewerPipeContextStub
+type implViewerPipeServerCallRecv struct {
+	s *ViewerPipeServerCallStub
 }
 
-func (s implViewerPipeContextRecv) Advance() bool {
+func (s implViewerPipeServerCallRecv) Advance() bool {
 	s.s.errRecv = s.s.Recv(&s.s.valRecv)
 	return s.s.errRecv == nil
 }
-func (s implViewerPipeContextRecv) Value() []byte {
+func (s implViewerPipeServerCallRecv) Value() []byte {
 	return s.s.valRecv
 }
-func (s implViewerPipeContextRecv) Err() error {
+func (s implViewerPipeServerCallRecv) Err() error {
 	if s.s.errRecv == io.EOF {
 		return nil
 	}
