diff --git a/bin/basemgr/BUILD.gn b/bin/basemgr/BUILD.gn
index d98ba4c..7daa45f 100644
--- a/bin/basemgr/BUILD.gn
+++ b/bin/basemgr/BUILD.gn
@@ -21,11 +21,11 @@
   ]
 
   sources = [
-    "main.cc",
     "basemgr_impl.cc",
     "basemgr_impl.h",
     "basemgr_settings.cc",
     "basemgr_settings.h",
+    "main.cc",
   ]
 
   deps = [
@@ -33,6 +33,7 @@
     "//garnet/public/fidl/fuchsia.auth",
     "//garnet/public/fidl/fuchsia.devicesettings",
     "//garnet/public/fidl/fuchsia.sys",
+    "//garnet/public/fidl/fuchsia.ui.app",
     "//garnet/public/fidl/fuchsia.ui.policy",
     "//garnet/public/fidl/fuchsia.ui.viewsv1",
     "//garnet/public/lib/component/cpp",
diff --git a/bin/basemgr/basemgr_impl.cc b/bin/basemgr/basemgr_impl.cc
index 51ed71e..71ddd2e 100644
--- a/bin/basemgr/basemgr_impl.cc
+++ b/bin/basemgr/basemgr_impl.cc
@@ -10,9 +10,8 @@
 #include <fuchsia/modular/auth/cpp/fidl.h>
 #include <fuchsia/modular/cpp/fidl.h>
 #include <fuchsia/sys/cpp/fidl.h>
+#include <fuchsia/ui/app/cpp/fidl.h>
 #include <fuchsia/ui/policy/cpp/fidl.h>
-#include <fuchsia/ui/viewsv1/cpp/fidl.h>
-#include <fuchsia/ui/viewsv1token/cpp/fidl.h>
 #include <lib/async/cpp/future.h>
 #include <lib/component/cpp/startup_context.h>
 #include <lib/fidl/cpp/interface_handle.h>
@@ -67,8 +66,7 @@
   basemgr_bindings_.AddBinding(this, std::move(request));
 }
 
-void BasemgrImpl::InitializePresentation(
-    fidl::InterfaceHandle<fuchsia::ui::viewsv1token::ViewOwner> view_owner) {
+void BasemgrImpl::InitializePresentation(zx::eventpair view_holder_token) {
   if (settings_.test && !settings_.enable_presenter) {
     return;
   }
@@ -78,7 +76,7 @@
           ? presentation_state_.presentation.Unbind().NewRequest()
           : presentation_state_.presentation.NewRequest();
 
-  presenter_->Present2(zx::eventpair(view_owner.TakeChannel().release()),
+  presenter_->Present2(std::move(view_holder_token),
                        std::move(presentation_request));
 
   AddGlobalKeyboardShortcuts(presentation_state_.presentation);
@@ -128,17 +126,21 @@
       launcher_, CloneStruct(settings_.base_shell));
   base_shell_app_->services().ConnectToService(base_shell_.NewRequest());
 
-  fuchsia::ui::viewsv1::ViewProviderPtr base_shell_view_provider;
+  fuchsia::ui::app::ViewProviderPtr base_shell_view_provider;
   base_shell_app_->services().ConnectToService(
       base_shell_view_provider.NewRequest());
 
-  // We still need to pass a request for root view to base shell since
-  // dev_base_shell (which mimics flutter behavior) blocks until it receives
-  // the root view request.
-  fidl::InterfaceHandle<fuchsia::ui::viewsv1token::ViewOwner> root_view;
-  base_shell_view_provider->CreateView(root_view.NewRequest(), nullptr);
+  zx::eventpair root_view_token, root_view_holder_token;
+  if (zx::eventpair::create(0u, &root_view_token, &root_view_holder_token) !=
+      ZX_OK)
+    FXL_NOTREACHED() << "Failed to create view tokens";
 
-  InitializePresentation(std::move(root_view));
+  // We still need to pass a token for root view to base shell since
+  // dev_base_shell (which mimics flutter behavior) blocks until it receives
+  // the root view token.
+  base_shell_view_provider->CreateView(std::move(root_view_token), nullptr,
+                                       nullptr);
+  InitializePresentation(std::move(root_view_holder_token));
 
   // Populate parameters and initialize the base shell.
   fuchsia::modular::BaseShellParams params;
@@ -291,7 +293,7 @@
     StopBaseShell();
   }
 
-  InitializePresentation(session_shell_view_owner_);
+  InitializePresentation(std::move(session_shell_view_holder_token_));
 }
 
 void BasemgrImpl::DidLogout() {
@@ -308,17 +310,23 @@
   StartBaseShell();
 }
 
-fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>
-BasemgrImpl::GetSessionShellViewOwner(
-    fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>) {
-  return session_shell_view_owner_.is_bound()
-             ? session_shell_view_owner_.Unbind().NewRequest()
-             : session_shell_view_owner_.NewRequest();
+zx::eventpair BasemgrImpl::GetSessionShellViewToken(
+    zx::eventpair /*default_view_token*/) {
+  if (session_shell_view_holder_token_.is_valid()) {
+    session_shell_view_holder_token_.reset();
+  }
+
+  zx::eventpair session_shell_view_token;
+  if (zx::eventpair::create(0u, &session_shell_view_token,
+                            &session_shell_view_holder_token_) != ZX_OK)
+    FXL_NOTREACHED() << "Failed to create view tokens";
+
+  return session_shell_view_token;
 }
 
 fidl::InterfaceHandle<fuchsia::sys::ServiceProvider>
 BasemgrImpl::GetSessionShellServiceProvider(
-    fidl::InterfaceHandle<fuchsia::sys::ServiceProvider>) {
+    fidl::InterfaceHandle<fuchsia::sys::ServiceProvider> /*default_services*/) {
   fidl::InterfaceHandle<fuchsia::sys::ServiceProvider> handle;
   service_namespace_.AddBinding(handle.NewRequest());
   return handle;
diff --git a/bin/basemgr/basemgr_impl.h b/bin/basemgr/basemgr_impl.h
index be0f6ee..7d88f2e 100644
--- a/bin/basemgr/basemgr_impl.h
+++ b/bin/basemgr/basemgr_impl.h
@@ -13,8 +13,6 @@
 #include <fuchsia/modular/cpp/fidl.h>
 #include <fuchsia/sys/cpp/fidl.h>
 #include <fuchsia/ui/policy/cpp/fidl.h>
-#include <fuchsia/ui/viewsv1/cpp/fidl.h>
-#include <fuchsia/ui/viewsv1token/cpp/fidl.h>
 #include <lib/async/cpp/future.h>
 #include <lib/component/cpp/startup_context.h>
 #include <lib/fidl/cpp/binding.h>
@@ -22,6 +20,7 @@
 #include <lib/fidl/cpp/interface_request.h>
 #include <lib/fidl/cpp/string.h>
 #include <lib/fxl/macros.h>
+#include <lib/zx/eventpair.h>
 
 #include "peridot/bin/basemgr/basemgr_settings.h"
 #include "peridot/bin/basemgr/cobalt/cobalt.h"
@@ -69,8 +68,7 @@
       fidl::InterfaceRequest<fuchsia::modular::internal::BasemgrDebug> request);
 
  private:
-  void InitializePresentation(
-      fidl::InterfaceHandle<fuchsia::ui::viewsv1token::ViewOwner> view_owner);
+  void InitializePresentation(zx::eventpair view_holder_token);
 
   void StartBaseShell();
 
@@ -99,15 +97,14 @@
   void DidLogout() override;
 
   // |UserProviderImpl::Delegate|
-  fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>
-      GetSessionShellViewOwner(
-          fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>)
-          override;
+  zx::eventpair GetSessionShellViewToken(
+      zx::eventpair /*default_view_token*/) override;
 
   // |UserProviderImpl::Delegate|
   fidl::InterfaceHandle<fuchsia::sys::ServiceProvider>
       GetSessionShellServiceProvider(
-          fidl::InterfaceHandle<fuchsia::sys::ServiceProvider>) override;
+          fidl::InterfaceHandle<
+              fuchsia::sys::ServiceProvider> /*default_services*/) override;
 
   // |KeyboardCaptureListenerHACK|
   void OnEvent(fuchsia::ui::input::KeyboardEvent event) override;
@@ -168,7 +165,7 @@
   fidl::BindingSet<fuchsia::ui::policy::KeyboardCaptureListenerHACK>
       keyboard_capture_listener_bindings_;
 
-  fuchsia::ui::viewsv1token::ViewOwnerPtr session_shell_view_owner_;
+  zx::eventpair session_shell_view_holder_token_;
 
   struct {
     fuchsia::ui::policy::PresentationPtr presentation;
diff --git a/bin/basemgr/dev_base_shell.cc b/bin/basemgr/dev_base_shell.cc
index f01490c..353ecb3 100644
--- a/bin/basemgr/dev_base_shell.cc
+++ b/bin/basemgr/dev_base_shell.cc
@@ -2,16 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Implementation of the fuchsia::modular::BaseShell service that passes a
-// command line configurable user name to its fuchsia::modular::UserProvider,
-// and is able to run a story with a single module through its life cycle.
-
 #include <memory>
 #include <utility>
 
 #include <fuchsia/auth/cpp/fidl.h>
 #include <fuchsia/modular/cpp/fidl.h>
-#include <fuchsia/ui/viewsv1token/cpp/fidl.h>
 #include <lib/app_driver/cpp/app_driver.h>
 #include <lib/async-loop/cpp/loop.h>
 #include <lib/callback/scoped_callback.h>
@@ -20,7 +15,8 @@
 #include <lib/fxl/logging.h>
 #include <lib/fxl/macros.h>
 #include <lib/fxl/memory/weak_ptr.h>
-#include "lib/fxl/strings/string_number_conversions.h"
+#include <lib/fxl/strings/string_number_conversions.h>
+#include <lib/zx/eventpair.h>
 
 #include "peridot/lib/fidl/single_service_app.h"
 #include "peridot/public/lib/integration_testing/cpp/reporting.h"
@@ -59,6 +55,9 @@
   bool test{};
 };
 
+// Implementation of the fuchsia::modular::BaseShell service that passes a
+// command line configurable user name to its fuchsia::modular::UserProvider,
+// and is able to run a story with a single module through its life cycle.
 class DevBaseShellApp : modular::SingleServiceApp<fuchsia::modular::BaseShell>,
                         fuchsia::modular::UserWatcher {
  public:
@@ -106,9 +105,7 @@
           fuchsia::sys::ServiceProvider> /*incoming_services*/,
       fidl::InterfaceHandle<
           fuchsia::sys::ServiceProvider> /*outgoing_services*/) override {
-    view_owner_request_ =
-        fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>(
-            zx::channel(view_token.release()));
+    view_token_ = std::move(view_token);
     Connect();
   }
 
@@ -141,14 +138,14 @@
   void Login(const std::string& account_id) {
     fuchsia::modular::UserLoginParams params;
     params.account_id = account_id;
-    params.view_owner = std::move(view_owner_request_);
+    params.view_token = std::move(view_token_);
     params.user_controller = user_controller_.NewRequest();
     user_provider_->Login(std::move(params));
     user_controller_->Watch(user_watcher_binding_.NewBinding());
   }
 
   void Connect() {
-    if (user_provider_ && view_owner_request_) {
+    if (user_provider_ && view_token_) {
       if (settings_.user.empty()) {
         // Incognito mode.
         Login("");
@@ -187,11 +184,10 @@
 
   const Settings settings_;
   fidl::Binding<fuchsia::modular::UserWatcher> user_watcher_binding_;
-  fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>
-      view_owner_request_;
   fuchsia::modular::BaseShellContextPtr base_shell_context_;
   fuchsia::modular::UserControllerPtr user_controller_;
   fuchsia::modular::UserProviderPtr user_provider_;
+  zx::eventpair view_token_;
   fxl::WeakPtrFactory<DevBaseShellApp> weak_ptr_factory_;
   FXL_DISALLOW_COPY_AND_ASSIGN(DevBaseShellApp);
 };
diff --git a/bin/basemgr/user_controller_impl.cc b/bin/basemgr/user_controller_impl.cc
index 1dc48d9..07329d4 100644
--- a/bin/basemgr/user_controller_impl.cc
+++ b/bin/basemgr/user_controller_impl.cc
@@ -23,9 +23,7 @@
     fuchsia::modular::AppConfig story_shell,
     fidl::InterfaceHandle<fuchsia::auth::TokenManager> ledger_token_manager,
     fidl::InterfaceHandle<fuchsia::auth::TokenManager> agent_token_manager,
-    fuchsia::modular::auth::AccountPtr account,
-    fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>
-        view_owner_request,
+    fuchsia::modular::auth::AccountPtr account, zx::eventpair view_token,
     fidl::InterfaceHandle<fuchsia::sys::ServiceProvider> base_shell_services,
     fidl::InterfaceRequest<fuchsia::modular::UserController>
         user_controller_request,
@@ -57,10 +55,10 @@
 
   // 2. Initialize the Sessionmgr service.
   sessionmgr_app_->services().ConnectToService(sessionmgr_.NewRequest());
-  sessionmgr_->Initialize(
+  sessionmgr_->Initialize2(
       std::move(account), std::move(session_shell), std::move(story_shell),
       std::move(ledger_token_manager), std::move(agent_token_manager),
-      user_context_binding_.NewBinding(), std::move(view_owner_request));
+      user_context_binding_.NewBinding(), std::move(view_token));
 
   sessionmgr_app_->SetAppErrorHandler([this] {
     FXL_LOG(ERROR) << "Sessionmgr seems to have crashed unexpectedly. "
diff --git a/bin/basemgr/user_controller_impl.h b/bin/basemgr/user_controller_impl.h
index 1af0f6a..b9d24c6 100644
--- a/bin/basemgr/user_controller_impl.h
+++ b/bin/basemgr/user_controller_impl.h
@@ -11,7 +11,6 @@
 #include <fuchsia/modular/internal/cpp/fidl.h>
 #include <fuchsia/sys/cpp/fidl.h>
 #include <fuchsia/ui/policy/cpp/fidl.h>
-#include <fuchsia/ui/viewsv1token/cpp/fidl.h>
 #include <lib/async/cpp/future.h>
 #include <lib/component/cpp/startup_context.h>
 #include <lib/fidl/cpp/array.h>
@@ -20,6 +19,7 @@
 #include <lib/fidl/cpp/interface_ptr_set.h>
 #include <lib/fidl/cpp/interface_request.h>
 #include <lib/fxl/macros.h>
+#include <lib/zx/eventpair.h>
 
 #include "peridot/lib/fidl/app_client.h"
 #include "peridot/lib/fidl/environment.h"
@@ -46,9 +46,7 @@
       fuchsia::modular::AppConfig story_shell,
       fidl::InterfaceHandle<fuchsia::auth::TokenManager> ledger_token_manager,
       fidl::InterfaceHandle<fuchsia::auth::TokenManager> agent_token_manager,
-      fuchsia::modular::auth::AccountPtr account,
-      fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>
-          view_owner_request,
+      fuchsia::modular::auth::AccountPtr account, zx::eventpair view_token,
       fidl::InterfaceHandle<fuchsia::sys::ServiceProvider> base_shell_services,
       fidl::InterfaceRequest<fuchsia::modular::UserController>
           user_controller_request,
diff --git a/bin/basemgr/user_controller_impl_unittest.cc b/bin/basemgr/user_controller_impl_unittest.cc
index ff99304..d1d769f 100644
--- a/bin/basemgr/user_controller_impl_unittest.cc
+++ b/bin/basemgr/user_controller_impl_unittest.cc
@@ -7,6 +7,7 @@
 #include <fuchsia/sys/cpp/fidl.h>
 #include <lib/component/cpp/testing/fake_launcher.h>
 #include <lib/gtest/test_loop_fixture.h>
+#include <lib/zx/eventpair.h>
 
 #include "peridot/lib/fidl/clone.h"
 
@@ -39,7 +40,7 @@
       &launcher, CloneStruct(app_config), CloneStruct(app_config),
       CloneStruct(app_config), std::move(ledger_token_manager),
       std::move(agent_token_manager), nullptr /* account */,
-      nullptr /* view_owner_request */, nullptr /* base_shell_services */,
+      zx::eventpair() /* view_token */, nullptr /* base_shell_services */,
       user_controller.NewRequest(), nullptr /* done_callback */);
 
   EXPECT_TRUE(callback_called);
@@ -69,7 +70,7 @@
       &launcher, CloneStruct(app_config), CloneStruct(app_config),
       CloneStruct(app_config), std::move(ledger_token_manager),
       std::move(agent_token_manager), nullptr /* account */,
-      nullptr /* view_owner_request */, nullptr /* base_shell_services */,
+      zx::eventpair() /* view_token */, nullptr /* base_shell_services */,
       user_controller.NewRequest(),
       /* done_callback = */ [&done_callback_called](UserControllerImpl*) {
         done_callback_called = true;
diff --git a/bin/basemgr/user_provider_impl.cc b/bin/basemgr/user_provider_impl.cc
index 7bfb4e4..8bc9ee4 100644
--- a/bin/basemgr/user_provider_impl.cc
+++ b/bin/basemgr/user_provider_impl.cc
@@ -501,15 +501,19 @@
   fuchsia::auth::TokenManagerPtr agent_token_manager =
       CreateTokenManager(account_id);
 
-  auto view_owner =
-      delegate_->GetSessionShellViewOwner(std::move(params.view_owner));
+  zx::eventpair default_view_token =
+      params.view_token
+          ? std::move(params.view_token)
+          : zx::eventpair(params.view_owner.TakeChannel().release());
+  auto view_token =
+      delegate_->GetSessionShellViewToken(std::move(default_view_token));
   auto service_provider =
       delegate_->GetSessionShellServiceProvider(std::move(params.services));
 
   auto controller = std::make_unique<UserControllerImpl>(
       launcher_, CloneStruct(sessionmgr_), CloneStruct(session_shell_),
       CloneStruct(story_shell_), std::move(ledger_token_manager),
-      std::move(agent_token_manager), std::move(account), std::move(view_owner),
+      std::move(agent_token_manager), std::move(account), std::move(view_token),
       std::move(service_provider), std::move(params.user_controller),
       [this](UserControllerImpl* c) {
         user_controllers_.erase(c);
diff --git a/bin/basemgr/user_provider_impl.h b/bin/basemgr/user_provider_impl.h
index 815315b..5fcc246 100644
--- a/bin/basemgr/user_provider_impl.h
+++ b/bin/basemgr/user_provider_impl.h
@@ -12,6 +12,7 @@
 #include <lib/component/cpp/startup_context.h>
 #include <lib/fidl/cpp/binding_set.h>
 #include <lib/fidl/cpp/interface_request.h>
+#include <lib/zx/eventpair.h>
 
 #include "peridot/bin/basemgr/user_controller_impl.h"
 
@@ -35,24 +36,19 @@
     // Called after UserProviderImpl successfully logs out a user.
     virtual void DidLogout() = 0;
 
-    // Enables the delegate to intercept the session shell's view owner, so that
+    // Enables the delegate to intercept the session shell's view token, so that
     // e.g. the delegate can embed it in a parent view or present it.
-    // |default_view_owner| is the view owner request that's passed to
-    // UserProviderImpl from base shell. If you don't need to intercept the
-    // view owner, return it without modifying it.
-    virtual fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>
-    GetSessionShellViewOwner(
-        fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>
-            default_view_owner) = 0;
+    virtual zx::eventpair GetSessionShellViewToken(
+        zx::eventpair /*default_view_token*/) = 0;
 
     // Enables the delegate to supply a different service provider to the user
     // shell. |default_service_provider| is the service provider passed to the
     // session shell by the base shell. If you don't need to replace it, return
     // it without modifying it.
     virtual fidl::InterfaceHandle<fuchsia::sys::ServiceProvider>
-    GetSessionShellServiceProvider(
-        fidl::InterfaceHandle<fuchsia::sys::ServiceProvider>
-            default_service_provider) = 0;
+        GetSessionShellServiceProvider(
+            fidl::InterfaceHandle<
+                fuchsia::sys::ServiceProvider> /*default_services*/) = 0;
   };
 
   // |account_provider| and |delegate| must outlive UserProviderImpl.
diff --git a/public/fidl/fuchsia.modular/basemgr/base_shell.fidl b/public/fidl/fuchsia.modular/basemgr/base_shell.fidl
index ff27c45..56efef0 100644
--- a/public/fidl/fuchsia.modular/basemgr/base_shell.fidl
+++ b/public/fidl/fuchsia.modular/basemgr/base_shell.fidl
@@ -13,31 +13,31 @@
 // teardown.
 //
 // In one component instance there can only be one BaseShell service instance.
-// The ViewOwner request is sent to the separate ViewProvider service. This way,
+// The view token is sent to the separate ViewProvider service. This way,
 // the base shell may be implemented as a flutter component.
 //
 // Teardown may be initiated by the base shell calling
 // BaseShellContext.Shutdown(), or by the system shutting down.
 [Discoverable]
 interface BaseShell {
-    1: Initialize(BaseShellContext base_shell_context,
-                  BaseShellParams base_shell_params);
+    Initialize(BaseShellContext base_shell_context,
+               BaseShellParams base_shell_params);
 
     // This method may be invoked by the basemgr to request an
     // AuthenticationUIContext. |request| will then be used to request the base
     // shell to show login screen during a UserProvider.AddUser() or if a token
     // needs to be refreshed.
-    3: GetAuthenticationUIContext(request<fuchsia.auth.AuthenticationUIContext> request);
+    GetAuthenticationUIContext(request<fuchsia.auth.AuthenticationUIContext> request);
 };
 
 // This interface allows the |BaseShell| to request capabilities from the
 // |Basemgr| in a way that is more explicit about the services that are
 // offered than a generic |ServiceProvider|.
 interface BaseShellContext {
-    1: GetUserProvider(request<UserProvider> request);
+    GetUserProvider(request<UserProvider> request);
 
     // This requests the shutdown of the basemgr.
-    2: Shutdown();
+    Shutdown();
 };
 
 // These params are passed to |BaseShell.Initialize|.
diff --git a/public/fidl/fuchsia.modular/basemgr/user_provider.fidl b/public/fidl/fuchsia.modular/basemgr/user_provider.fidl
index 45aeca7..5f5d8ad 100644
--- a/public/fidl/fuchsia.modular/basemgr/user_provider.fidl
+++ b/public/fidl/fuchsia.modular/basemgr/user_provider.fidl
@@ -24,23 +24,23 @@
     //
     // |account| is NULL if there was an error during identification and
     // |error_code| is set.
-    1: AddUser(fuchsia.modular.auth.IdentityProvider identity_provider)
-           -> (fuchsia.modular.auth.Account? account, string? error_code);
+    AddUser(fuchsia.modular.auth.IdentityProvider identity_provider)
+        -> (fuchsia.modular.auth.Account? account, string? error_code);
 
     // Removes information of a user from the local user database.
     //
     // |account_id| is received from either AddUser() or PreviousUsers().
-    2: RemoveUser(string account_id) -> (string? error_code);
+    RemoveUser(string account_id) -> (string? error_code);
 
     // Uses the credentials provided in AddUser() to start a user session. This
     // would mean syncing with the user's ledger instance and displaying a user
     // shell with all of the user's stories.
     // TODO(alhaad): In the future, we want to protect Login() with a password,
     // Android lock pattern, etc.
-    3: Login(UserLoginParams user_login_params);
+    Login(UserLoginParams user_login_params);
 
     // List of all users who have authenticated to this device in the past.
-    4: PreviousUsers() -> (vector<fuchsia.modular.auth.Account> accounts);
+    PreviousUsers() -> (vector<fuchsia.modular.auth.Account> accounts);
 };
 
 // Used to specify arguments to log into a user session.
@@ -49,9 +49,11 @@
     // can be NULL which means logging-in in an incognito mode.
     string? account_id;
 
-    // |view_owner| is the view given to the |SessionShell| started for the newly
+    // |view_token| identifies the view for the |SessionShell| started for the newly
     // logged-in user.
-    request<fuchsia.ui.viewsv1token.ViewOwner> view_owner;
+    // TODO(SCN-1018): Remove the deprecated |view_owner|.
+    handle<eventpair>? view_token;
+    request<fuchsia.ui.viewsv1token.ViewOwner>? view_owner;
 
     // Services provided by the |BaseShell| that can be offered to the
     // |SessionShell| that is being logged into.
@@ -87,15 +89,15 @@
     // Logs out a user by tearing down its sessionmgr. Returns once the
     // Sessionmgr has been torn down. This also triggers OnLogout() for
     // |UserWatcher|s.
-    1: Logout() -> ();
+    Logout() -> ();
 
     // Registers a watcher for the user's life cycle events.
-    2: Watch(UserWatcher watcher);
+    Watch(UserWatcher watcher);
 
     // Stops the currently running session shell and starts the one specified by
     // |session_shell_config|. This operation stops all stories before starting
     // the new shell.
-    3: SwapSessionShell(AppConfig session_shell_config) -> ();
+    SwapSessionShell(AppConfig session_shell_config) -> ();
 };
 
 // Implemented by a |BaseShell| implementation in order to receive
@@ -107,5 +109,5 @@
     //
     // TODO(vardhan): Make a guarantee that once OnLogout() is invoked, it is
     // possible to UserProvider.Login() the same user.
-    1: OnLogout();
+    OnLogout();
 };
