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 4f8f9fd..c9be954 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,6 +69,11 @@
 };
     
       
+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');
 };
@@ -228,6 +233,27 @@
     
       
     {
+    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 af7c947..ddcf6c8 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);
-      });
-    });
-  });
\ No newline at end of file
+//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
