diff --git a/src/gen-vdl/v.io/x/ref/services/wspr/internal/namespace/index.js b/src/gen-vdl/v.io/x/ref/services/wspr/internal/namespace/index.js
index c9be954..4f8f9fd 100644
--- a/src/gen-vdl/v.io/x/ref/services/wspr/internal/namespace/index.js
+++ b/src/gen-vdl/v.io/x/ref/services/wspr/internal/namespace/index.js
@@ -69,11 +69,6 @@
 };
     
       
-Namespace.prototype.shallowResolve = function(ctx, serverCall, name) {
-  throw new Error('Method ShallowResolve not implemented');
-};
-    
-      
 Namespace.prototype.flushCacheEntry = function(ctx, serverCall, name) {
   throw new Error('Method FlushCacheEntry not implemented');
 };
@@ -233,27 +228,6 @@
     
       
     {
-    name: 'ShallowResolve',
-    doc: "// ShallowResolve resolves the object name into its mounted servers.  It is the same\n// as Resolve except when mounttables are stacked below the same mount point.  For example,\n// if service D is mounted onto /MTA/a/b and /MTA/a/b is mounted onto /MTB/x/y then\n// Resolve(/MTB/x/y) will return a pointer to D while ShallowResolve(/MTB/x/y) will\n// return a pointer to /MTA/a/b.",
-    inArgs: [{
-      name: 'name',
-      doc: "",
-      type: vdl.types.STRING
-    },
-    ],
-    outArgs: [{
-      name: '',
-      doc: "",
-      type: _type1
-    },
-    ],
-    inStream: null,
-    outStream: null,
-    tags: []
-  },
-    
-      
-    {
     name: 'FlushCacheEntry',
     doc: "// FlushCacheEntry removes the namespace cache entry for a given name.",
     inArgs: [{
diff --git a/test/integration/test-server-option.js b/test/integration/test-server-option.js
index c30517c..af7c947 100644
--- a/test/integration/test-server-option.js
+++ b/test/integration/test-server-option.js
@@ -75,34 +75,34 @@
   });
 });
 
-//test('Test ServesMountTable=True Server Option', function(t) {
-//  var serverOption = vanadium.rpc.serverOption({
-//    servesMountTable: true
-//  });
-//  var name = 'testing/serverOption/ServesMountTableTrue';
-//
-//  var servObj = {
-//    name: name,
-//    dispatcher: dispatcher,
-//    serverOption: serverOption
-//  };
-//
-//  serve(servObj, function(err, res) {
-//    t.error(err);
-//
-//    var rt = res.runtime;
-//    var ns = rt.getNamespace();
-//    var stream = ns.glob(rt.getContext(), name).stream;
-//    stream.on('data', function(mp) {
-//      t.error(err);
-//
-//      t.equal(mp.isLeaf, false, 'Glob must indicate server is not a leaf');
-//      t.equal(mp.servesMountTable, true,
-//        'Glob must indicate server is a mounttable');
-//      res.end(t);
-//    });
-//  });
-//});
+test('Test ServesMountTable=True Server Option', function(t) {
+  var serverOption = vanadium.rpc.serverOption({
+    servesMountTable: true
+  });
+  var name = 'testing/serverOption/ServesMountTableTrue';
+
+  var servObj = {
+    name: name,
+    dispatcher: dispatcher,
+    serverOption: serverOption
+  };
+
+  serve(servObj, function(err, res) {
+    t.error(err);
+
+    var rt = res.runtime;
+    var ns = rt.getNamespace();
+    var stream = ns.glob(rt.getContext(), name).stream;
+    stream.on('data', function(mp) {
+      t.error(err);
+
+      t.equal(mp.isLeaf, false, 'Glob must indicate server is not a leaf');
+      t.equal(mp.servesMountTable, true,
+        'Glob must indicate server is a mounttable');
+      res.end(t);
+    });
+  });
+});
 
 test('Test ServesMountTable=false server option', function(t) {
   var serverOption = vanadium.rpc.serverOption({
@@ -133,33 +133,33 @@
   });
 });
 
-//test('Test ServesMountTable=ture and IsLeaf=true server option',
-//  function(t) {
-//    var serverOption = vanadium.rpc.serverOption({
-//      servesMountTable: true,
-//      isLeaf: true
-//    });
-//    var name = 'testing/serverOption/Both';
-//
-//    var servObj = {
-//      name: name,
-//      dispatcher: dispatcher,
-//      serverOption: serverOption
-//    };
-//
-//    serve(servObj, function(err, res) {
-//      t.error(err);
-//
-//      var rt = res.runtime;
-//      var ns = rt.getNamespace();
-//      var stream = ns.glob(rt.getContext(), name).stream;
-//      stream.on('data', function(mp) {
-//        t.error(err);
-//
-//        t.equal(mp.isLeaf, true, 'Glob must indicate server is a leaf');
-//        t.equal(mp.servesMountTable, true,
-//          'Glob must indicate server is a mounttable');
-//        res.end(t);
-//      });
-//    });
-//  });
+test('Test ServesMountTable=ture and IsLeaf=true server option',
+  function(t) {
+    var serverOption = vanadium.rpc.serverOption({
+      servesMountTable: true,
+      isLeaf: true
+    });
+    var name = 'testing/serverOption/Both';
+
+    var servObj = {
+      name: name,
+      dispatcher: dispatcher,
+      serverOption: serverOption
+    };
+
+    serve(servObj, function(err, res) {
+      t.error(err);
+
+      var rt = res.runtime;
+      var ns = rt.getNamespace();
+      var stream = ns.glob(rt.getContext(), name).stream;
+      stream.on('data', function(mp) {
+        t.error(err);
+
+        t.equal(mp.isLeaf, true, 'Glob must indicate server is a leaf');
+        t.equal(mp.servesMountTable, true,
+          'Glob must indicate server is a mounttable');
+        res.end(t);
+      });
+    });
+  });
\ No newline at end of file
