[session_shell] Rename user_shell to session_shell. This is a soft
transition:

- sessionmgr implements both SessionShellContext and UserShellContext,
the methods are identical so they don't need to be duplicated. Only the
using-declaration of GetAccountCallback and GetDeviceNameCallback needed
resolution.

- UserLoginParams and basemgr supports both user_shell_config and
session_shell_config until migration is complete

TESTED: paved with no changes to other repos
Change-Id: I8cd5d91b456944f5fb8833633fd1872d48431bef
diff --git a/bin/basemgr/BUILD.gn b/bin/basemgr/BUILD.gn
index eac625d..e8f9776 100644
--- a/bin/basemgr/BUILD.gn
+++ b/bin/basemgr/BUILD.gn
@@ -41,7 +41,7 @@
     "//peridot/lib/fidl:clone",
     "//peridot/lib/fidl:environment",
     "//peridot/lib/ledger_client:constants",
-    "//peridot/lib/user_shell_settings",
+    "//peridot/lib/session_shell_settings",
     "//peridot/lib/util:filesystem",
     "//peridot/public/fidl/fuchsia.modular",
     "//peridot/public/fidl/fuchsia.modular.auth",
diff --git a/bin/basemgr/basemgr.cc b/bin/basemgr/basemgr.cc
index f364711..0a110fe 100644
--- a/bin/basemgr/basemgr.cc
+++ b/bin/basemgr/basemgr.cc
@@ -37,7 +37,7 @@
 #include "peridot/lib/fidl/app_client.h"
 #include "peridot/lib/fidl/array_to_string.h"
 #include "peridot/lib/fidl/clone.h"
-#include "peridot/lib/user_shell_settings/user_shell_settings.h"
+#include "peridot/lib/session_shell_settings/session_shell_settings.h"
 #include "peridot/lib/util/filesystem.h"
 
 namespace modular {
@@ -53,8 +53,14 @@
         command_line.GetOptionValueWithDefault("story_shell", "mondrian");
     sessionmgr.url =
         command_line.GetOptionValueWithDefault("sessionmgr", "sessionmgr");
-    user_shell.url = command_line.GetOptionValueWithDefault(
-        "user_shell", "ermine_user_shell");
+    // TODO(alexmin): Remove user_shell argument after migration is complete.
+    if (command_line.HasOption("user_shell")) {
+      session_shell.url = command_line.GetOptionValueWithDefault(
+          "user_shell", "ermine_session_shell");
+    } else {
+      session_shell.url = command_line.GetOptionValueWithDefault(
+          "session_shell", "ermine_session_shell");
+    }
     account_provider.url = command_line.GetOptionValueWithDefault(
         "account_provider", "oauth_token_manager");
 
@@ -79,27 +85,27 @@
         command_line.GetOptionValueWithDefault("story_shell_args", ""),
         &story_shell.args);
 
-    // TODO(alexmin): Remove user_runner_args after migration is complete.
-    if (command_line.HasOption("user_runner_args")) {
+    ParseShellArgs(
+        command_line.GetOptionValueWithDefault("sessionmgr_args", ""),
+        &sessionmgr.args);
+
+    // TODO(alexmin): Remove user_shell_args after migration is complete.
+    if (command_line.HasOption("user_shell_args")) {
       ParseShellArgs(
-          command_line.GetOptionValueWithDefault("user_runner_args", ""),
-          &sessionmgr.args);
+          command_line.GetOptionValueWithDefault("user_shell_args", ""),
+          &session_shell.args);
     } else {
       ParseShellArgs(
-          command_line.GetOptionValueWithDefault("sessionmgr_args", ""),
-          &sessionmgr.args);
+          command_line.GetOptionValueWithDefault("session_shell_args", ""),
+          &session_shell.args);
     }
 
-    ParseShellArgs(
-        command_line.GetOptionValueWithDefault("user_shell_args", ""),
-        &user_shell.args);
-
     if (test) {
       base_shell.args.push_back("--test");
       story_shell.args.push_back("--test");
       sessionmgr.args.push_back("--test");
-      user_shell.args.push_back("--test");
-      test_name = FindTestName(user_shell.url, user_shell.args);
+      session_shell.args.push_back("--test");
+      test_name = FindTestName(session_shell.url, session_shell.args);
       disable_statistics = true;
       ignore_monitor = true;
       no_minfs = true;
@@ -110,8 +116,8 @@
     return R"USAGE(basemgr
       --base_shell=BASE_SHELL
       --base_shell_args=SHELL_ARGS
-      --user_shell=USER_SHELL
-      --user_shell_args=SHELL_ARGS
+      --session_shell=SESSION_SHELL
+      --session_shell_args=SHELL_ARGS
       --story_shell=STORY_SHELL
       --story_shell_args=SHELL_ARGS
       --account_provider=ACCOUNT_PROVIDER
@@ -121,15 +127,15 @@
       --test
       --enable_presenter
       --enable_garnet_token_manager
-    DEVICE_NAME: Name which user shell uses to identify this device.
+    DEVICE_NAME: Name which session shell uses to identify this device.
     BASE_SHELL:  URL of the base shell to run.
                 Defaults to "userpicker_base_shell".
                 For integration testing use "dev_base_shell".
     SESSIONMGR: URL of the sessionmgr to run.
                 Defaults to "sessionmgr".
-    USER_SHELL: URL of the user shell to run.
-                Defaults to "ermine_user_shell".
-                For integration testing use "dev_user_shell".
+    SESSION_SHELL: URL of the session shell to run.
+                Defaults to "ermine_session_shell".
+                For integration testing use "dev_session_shell".
     STORY_SHELL: URL of the story shell to run.
                 Defaults to "mondrian".
                 For integration testing use "dev_story_shell".
@@ -142,7 +148,7 @@
   fuchsia::modular::AppConfig base_shell;
   fuchsia::modular::AppConfig story_shell;
   fuchsia::modular::AppConfig sessionmgr;
-  fuchsia::modular::AppConfig user_shell;
+  fuchsia::modular::AppConfig session_shell;
   fuchsia::modular::AppConfig account_provider;
 
   std::string test_name;
@@ -187,13 +193,13 @@
   // Extract the test name using knowledge of how Modular structures its
   // command lines for testing.
   static std::string FindTestName(
-      const fidl::StringPtr& user_shell,
-      const fidl::VectorPtr<fidl::StringPtr>& user_shell_args) {
+      const fidl::StringPtr& session_shell,
+      const fidl::VectorPtr<fidl::StringPtr>& session_shell_args) {
     const std::string kRootModule = "--root_module";
-    std::string result = user_shell;
+    std::string result = session_shell;
 
-    for (const auto& user_shell_arg : *user_shell_args) {
-      const auto& arg = user_shell_arg.get();
+    for (const auto& session_shell_arg : *session_shell_args) {
+      const auto& arg = session_shell_arg.get();
       if (arg.substr(0, kRootModule.size()) == kRootModule) {
         result = arg.substr(kRootModule.size());
       }
@@ -418,7 +424,7 @@
         account_provider_context_binding_.NewBinding());
 
     user_provider_impl_.reset(new UserProviderImpl(
-        context_, settings_.sessionmgr, settings_.user_shell,
+        context_, settings_.sessionmgr, settings_.session_shell,
         settings_.story_shell, account_provider_->primary_service().get(),
         token_manager_factory_.get(),
         authentication_context_provider_binding_.NewBinding().Bind(),
@@ -492,7 +498,7 @@
   // |UserProviderImpl::Delegate|
   void DidLogin() override {
     // Continues if `enable_presenter` is set to true during testing, as
-    // ownership of the Presenter should still be moved to the user shell.
+    // ownership of the Presenter should still be moved to the session shell.
     if (settings_.test && !settings_.enable_presenter) {
       // TODO(MI4-1117): Integration tests currently expect base shell to
       // always be running. So, if we're running under a test, do not shut down
@@ -506,17 +512,17 @@
       StopBaseShell();
     }
 
-    InitializePresentation(user_shell_view_owner_);
+    InitializePresentation(session_shell_view_owner_);
 
-    const auto& settings_vector = UserShellSettings::GetSystemSettings();
-    if (active_user_shell_index_ >= settings_vector.size()) {
-      FXL_LOG(ERROR) << "Active user shell index is "
-                     << active_user_shell_index_ << ", but only "
-                     << settings_vector.size() << " user shells exist.";
+    const auto& settings_vector = SessionShellSettings::GetSystemSettings();
+    if (active_session_shell_index_ >= settings_vector.size()) {
+      FXL_LOG(ERROR) << "Active session shell index is "
+                     << active_session_shell_index_ << ", but only "
+                     << settings_vector.size() << " session shells exist.";
       return;
     }
 
-    UpdatePresentation(settings_vector[active_user_shell_index_]);
+    UpdatePresentation(settings_vector[active_session_shell_index_]);
   }
 
   // |UserProviderImpl::Delegate|
@@ -536,16 +542,16 @@
 
   // |UserProviderImpl::Delegate|
   fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>
-  GetUserShellViewOwner(
+  GetSessionShellViewOwner(
       fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>) override {
-    return user_shell_view_owner_.is_bound()
-               ? user_shell_view_owner_.Unbind().NewRequest()
-               : user_shell_view_owner_.NewRequest();
+    return session_shell_view_owner_.is_bound()
+               ? session_shell_view_owner_.Unbind().NewRequest()
+               : session_shell_view_owner_.NewRequest();
   }
 
   // |UserProviderImpl::Delegate|
   fidl::InterfaceHandle<fuchsia::sys::ServiceProvider>
-  GetUserShellServiceProvider(
+  GetSessionShellServiceProvider(
       fidl::InterfaceHandle<fuchsia::sys::ServiceProvider>) override {
     fidl::InterfaceHandle<fuchsia::sys::ServiceProvider> handle;
     service_namespace_.AddBinding(handle.NewRequest());
@@ -556,7 +562,7 @@
   void OnEvent(fuchsia::ui::input::KeyboardEvent event) override {
     switch (event.code_point) {
       case ' ': {
-        SwapUserShell();
+        SwapSessionShell();
         break;
       }
       case 's': {
@@ -595,7 +601,7 @@
         keyboard_capture_listener_bindings_.AddBinding(this));
   }
 
-  void UpdatePresentation(const UserShellSettings& settings) {
+  void UpdatePresentation(const SessionShellSettings& settings) {
     if (settings.display_usage != fuchsia::ui::policy::DisplayUsage::kUnknown) {
       FXL_DLOG(INFO) << "Setting display usage: "
                      << fidl::ToUnderlying(settings.display_usage);
@@ -611,23 +617,23 @@
     }
   }
 
-  void SwapUserShell() {
-    if (UserShellSettings::GetSystemSettings().empty()) {
-      FXL_DLOG(INFO) << "No user shells has been defined";
+  void SwapSessionShell() {
+    if (SessionShellSettings::GetSystemSettings().empty()) {
+      FXL_DLOG(INFO) << "No session shells has been defined";
       return;
     }
 
-    active_user_shell_index_ = (active_user_shell_index_ + 1) %
-                               UserShellSettings::GetSystemSettings().size();
-    const auto& settings =
-        UserShellSettings::GetSystemSettings().at(active_user_shell_index_);
+    active_session_shell_index_ =
+        (active_session_shell_index_ + 1) %
+        SessionShellSettings::GetSystemSettings().size();
+    const auto& settings = SessionShellSettings::GetSystemSettings().at(
+        active_session_shell_index_);
 
-    auto user_shell_config = fuchsia::modular::AppConfig::New();
-    user_shell_config->url = settings.name;
+    auto session_shell_config = fuchsia::modular::AppConfig::New();
+    session_shell_config->url = settings.name;
 
-    user_provider_impl_->SwapUserShell(std::move(*user_shell_config))->Then([] {
-      FXL_DLOG(INFO) << "Swapped user shell";
-    });
+    user_provider_impl_->SwapSessionShell(std::move(*session_shell_config))
+        ->Then([] { FXL_DLOG(INFO) << "Swapped session shell"; });
   }
 
   void SetNextShadowTechnique() {
@@ -713,7 +719,7 @@
   fidl::BindingSet<fuchsia::ui::policy::KeyboardCaptureListenerHACK>
       keyboard_capture_listener_bindings_;
 
-  fuchsia::ui::viewsv1token::ViewOwnerPtr user_shell_view_owner_;
+  fuchsia::ui::viewsv1token::ViewOwnerPtr session_shell_view_owner_;
 
   struct {
     fuchsia::ui::policy::PresentationPtr presentation;
@@ -726,7 +732,7 @@
 
   component::ServiceNamespace service_namespace_;
 
-  std::vector<UserShellSettings>::size_type active_user_shell_index_{};
+  std::vector<SessionShellSettings>::size_type active_session_shell_index_{};
 
   FXL_DISALLOW_COPY_AND_ASSIGN(BasemgrApp);
 };
diff --git a/bin/basemgr/user_controller_impl.cc b/bin/basemgr/user_controller_impl.cc
index 328f30c..1463f0c 100644
--- a/bin/basemgr/user_controller_impl.cc
+++ b/bin/basemgr/user_controller_impl.cc
@@ -19,7 +19,7 @@
 UserControllerImpl::UserControllerImpl(
     fuchsia::sys::Launcher* const launcher,
     fuchsia::modular::AppConfig sessionmgr,
-    fuchsia::modular::AppConfig user_shell,
+    fuchsia::modular::AppConfig session_shell,
     fuchsia::modular::AppConfig story_shell,
     fidl::InterfaceHandle<fuchsia::modular::auth::TokenProviderFactory>
         token_provider_factory,
@@ -60,7 +60,7 @@
   // 2. Initialize the Sessionmgr service.
   sessionmgr_app_->services().ConnectToService(sessionmgr_.NewRequest());
   sessionmgr_->Initialize(
-      std::move(account), std::move(user_shell), std::move(story_shell),
+      std::move(account), std::move(session_shell), std::move(story_shell),
       std::move(token_provider_factory), std::move(ledger_token_manager),
       std::move(agent_token_manager), user_context_binding_.NewBinding(),
       std::move(view_owner_request));
@@ -112,14 +112,21 @@
   }
 }
 
-FuturePtr<> UserControllerImpl::SwapUserShell(
-    fuchsia::modular::AppConfig user_shell_config) {
-  auto future = Future<>::Create("SwapUserShell");
-  SwapUserShell(std::move(user_shell_config), future->Completer());
+FuturePtr<> UserControllerImpl::SwapSessionShell(
+    fuchsia::modular::AppConfig session_shell_config) {
+  auto future = Future<>::Create("SwapSessionShell");
+  SwapSessionShell(std::move(session_shell_config), future->Completer());
   return future;
 }
 
 // |fuchsia::modular::UserController|
+void UserControllerImpl::SwapSessionShell(
+    fuchsia::modular::AppConfig session_shell_config,
+    SwapSessionShellCallback callback) {
+  sessionmgr_->SwapSessionShell(std::move(session_shell_config), callback);
+}
+
+// |fuchsia::modular::UserController|
 void UserControllerImpl::SwapUserShell(
     fuchsia::modular::AppConfig user_shell_config,
     SwapUserShellCallback callback) {
diff --git a/bin/basemgr/user_controller_impl.h b/bin/basemgr/user_controller_impl.h
index 5e8f039..ec2e418 100644
--- a/bin/basemgr/user_controller_impl.h
+++ b/bin/basemgr/user_controller_impl.h
@@ -41,7 +41,7 @@
 
   UserControllerImpl(
       fuchsia::sys::Launcher* launcher, fuchsia::modular::AppConfig sessionmgr,
-      fuchsia::modular::AppConfig user_shell,
+      fuchsia::modular::AppConfig session_shell,
       fuchsia::modular::AppConfig story_shell,
       fidl::InterfaceHandle<fuchsia::modular::auth::TokenProviderFactory>
           token_provider_factory,
@@ -59,12 +59,18 @@
   // |fuchsia::modular::UserController|
   void Logout(LogoutCallback done) override;
 
-  // Stops the active user shell, and starts the user shell specified in
-  // |user_shell_config|.
-  FuturePtr<> SwapUserShell(fuchsia::modular::AppConfig user_shell_config);
+  // Stops the active session shell, and starts the session shell specified in
+  // |session_shell_config|.
+  FuturePtr<> SwapSessionShell(
+      fuchsia::modular::AppConfig session_shell_config);
 
  private:
   // |fuchsia::modular::UserController|
+  void SwapSessionShell(fuchsia::modular::AppConfig session_shell_config,
+                        SwapSessionShellCallback callback) override;
+
+  // DEPRECATED: Use SwapSessionShell().
+  // |fuchsia::modular::UserController|
   void SwapUserShell(fuchsia::modular::AppConfig user_shell_config,
                      SwapUserShellCallback callback) override;
 
diff --git a/bin/basemgr/user_provider_impl.cc b/bin/basemgr/user_provider_impl.cc
index 144ff7d..d270b17 100644
--- a/bin/basemgr/user_provider_impl.cc
+++ b/bin/basemgr/user_provider_impl.cc
@@ -112,7 +112,7 @@
 UserProviderImpl::UserProviderImpl(
     std::shared_ptr<component::StartupContext> context,
     const fuchsia::modular::AppConfig& sessionmgr,
-    const fuchsia::modular::AppConfig& default_user_shell,
+    const fuchsia::modular::AppConfig& default_session_shell,
     const fuchsia::modular::AppConfig& story_shell,
     fuchsia::modular::auth::AccountProvider* account_provider,
     fuchsia::auth::TokenManagerFactory* token_manager_factory,
@@ -121,7 +121,7 @@
     bool use_token_manager_factory, Delegate* const delegate)
     : context_(std::move(context)),
       sessionmgr_(sessionmgr),
-      default_user_shell_(default_user_shell),
+      default_session_shell_(default_session_shell),
       story_shell_(story_shell),
       account_provider_(account_provider),
       token_manager_factory_(token_manager_factory),
@@ -573,18 +573,20 @@
     agent_token_manager = CreateTokenManager(account_id);
   }
 
-  auto user_shell = params.user_shell_config
-                        ? std::move(*params.user_shell_config)
-                        : CloneStruct(default_user_shell_);
+  auto session_shell = params.session_shell_config
+                           ? std::move(*params.session_shell_config)
+                           : params.user_shell_config
+                                 ? std::move(*params.user_shell_config)
+                                 : CloneStruct(default_session_shell_);
 
   auto view_owner =
-      delegate_->GetUserShellViewOwner(std::move(params.view_owner));
+      delegate_->GetSessionShellViewOwner(std::move(params.view_owner));
   auto service_provider =
-      delegate_->GetUserShellServiceProvider(std::move(params.services));
+      delegate_->GetSessionShellServiceProvider(std::move(params.services));
 
   auto controller = std::make_unique<UserControllerImpl>(
       context_->launcher().get(), CloneStruct(sessionmgr_),
-      std::move(user_shell), CloneStruct(story_shell_),
+      std::move(session_shell), CloneStruct(story_shell_),
       std::move(token_provider_factory), std::move(ledger_token_manager),
       std::move(agent_token_manager), std::move(account), std::move(view_owner),
       std::move(service_provider), std::move(params.user_controller),
@@ -598,17 +600,17 @@
   delegate_->DidLogin();
 }
 
-FuturePtr<> UserProviderImpl::SwapUserShell(
-    fuchsia::modular::AppConfig user_shell_config) {
+FuturePtr<> UserProviderImpl::SwapSessionShell(
+    fuchsia::modular::AppConfig session_shell_config) {
   if (user_controllers_.size() == 0)
-    return Future<>::CreateCompleted("SwapUserShell(Completed)");
+    return Future<>::CreateCompleted("SwapSessionShell(Completed)");
 
   FXL_CHECK(user_controllers_.size() == 1)
       << user_controllers_.size()
       << " user controllers exist, which should be impossible.";
 
   auto user_controller = user_controllers_.begin()->first;
-  return user_controller->SwapUserShell(std::move(user_shell_config));
+  return user_controller->SwapSessionShell(std::move(session_shell_config));
 }
 
 }  // namespace modular
diff --git a/bin/basemgr/user_provider_impl.h b/bin/basemgr/user_provider_impl.h
index e853a18..3079fa5 100644
--- a/bin/basemgr/user_provider_impl.h
+++ b/bin/basemgr/user_provider_impl.h
@@ -35,22 +35,22 @@
     // Called after UserProviderImpl successfully logs out a user.
     virtual void DidLogout() = 0;
 
-    // Enables the delegate to intercept the user shell's view owner, so that
+    // Enables the delegate to intercept the session shell's view owner, 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>
-    GetUserShellViewOwner(
+    GetSessionShellViewOwner(
         fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>
             default_view_owner) = 0;
 
     // Enables the delegate to supply a different service provider to the user
     // shell. |default_service_provider| is the service provider passed to the
-    // user shell by the base shell. If you don't need to replace it, return
+    // 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>
-    GetUserShellServiceProvider(
+    GetSessionShellServiceProvider(
         fidl::InterfaceHandle<fuchsia::sys::ServiceProvider>
             default_service_provider) = 0;
   };
@@ -59,7 +59,7 @@
   UserProviderImpl(
       std::shared_ptr<component::StartupContext> context,
       const fuchsia::modular::AppConfig& sessionmgr,
-      const fuchsia::modular::AppConfig& default_user_shell,
+      const fuchsia::modular::AppConfig& default_session_shell,
       const fuchsia::modular::AppConfig& story_shell,
       fuchsia::modular::auth::AccountProvider* account_provider,
       fuchsia::auth::TokenManagerFactory* token_manager_factory,
@@ -70,10 +70,11 @@
 
   void Teardown(const std::function<void()>& callback);
 
-  // Stops the active user shell, and starts the user shell specified in
-  // |user_shell_config|. This has no effect, and will return an
-  // immediately-completed future, if no user shells are running.
-  FuturePtr<> SwapUserShell(fuchsia::modular::AppConfig user_shell_config);
+  // Stops the active session shell, and starts the session shell specified in
+  // |session_shell_config|. This has no effect, and will return an
+  // immediately-completed future, if no session shells are running.
+  FuturePtr<> SwapSessionShell(
+      fuchsia::modular::AppConfig session_shell_config);
 
  private:
   // |fuchsia::modular::UserProvider|
@@ -131,7 +132,7 @@
   std::shared_ptr<component::StartupContext> context_;
   const fuchsia::modular::AppConfig& sessionmgr_;  // Neither owned nor copied.
   const fuchsia::modular::AppConfig&
-      default_user_shell_;                          // Neither owned nor copied.
+      default_session_shell_;                       // Neither owned nor copied.
   const fuchsia::modular::AppConfig& story_shell_;  // Neither owned nor copied.
   fuchsia::modular::auth::AccountProvider* const
       account_provider_;  // Neither owned nor copied.
diff --git a/bin/sessionmgr/BUILD.gn b/bin/sessionmgr/BUILD.gn
index 690173a..7cc6b2c 100644
--- a/bin/sessionmgr/BUILD.gn
+++ b/bin/sessionmgr/BUILD.gn
@@ -90,11 +90,11 @@
   ]
 }
 
-executable_package("dev_user_shell") {
+executable_package("dev_session_shell") {
   deprecated_no_cmx = "//build"
 
   sources = [
-    "dev_user_shell.cc",
+    "dev_session_shell.cc",
   ]
 
   deps = [
diff --git a/bin/sessionmgr/dev_user_shell.cc b/bin/sessionmgr/dev_session_shell.cc
similarity index 84%
rename from bin/sessionmgr/dev_user_shell.cc
rename to bin/sessionmgr/dev_session_shell.cc
index 8e8669b..5d70396 100644
--- a/bin/sessionmgr/dev_user_shell.cc
+++ b/bin/sessionmgr/dev_session_shell.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Implementation of a user shell for module development. It takes a
+// Implementation of a session shell for module development. It takes a
 // root module URL and data for its fuchsia::modular::Link as command line
 // arguments, which can be set using the basemgr --user-shell-args flag.
 
@@ -52,27 +52,26 @@
   std::string test_driver_url;
 };
 
-class DevUserShellApp : fuchsia::modular::StoryWatcher,
-                        fuchsia::modular::InterruptionListener,
-                        fuchsia::modular::NextListener,
-                        public modular::ViewApp {
+class DevSessionShellApp : fuchsia::modular::StoryWatcher,
+                           fuchsia::modular::InterruptionListener,
+                           fuchsia::modular::NextListener,
+                           public modular::ViewApp {
  public:
-  explicit DevUserShellApp(component::StartupContext* const startup_context,
-                           Settings settings)
+  explicit DevSessionShellApp(component::StartupContext* const startup_context,
+                              Settings settings)
       : ViewApp(startup_context),
         settings_(std::move(settings)),
         story_watcher_binding_(this) {
     puppet_master_ =
         startup_context
             ->ConnectToEnvironmentService<fuchsia::modular::PuppetMaster>();
-    user_shell_context_ =
-        startup_context
-            ->ConnectToEnvironmentService<fuchsia::modular::UserShellContext>();
-    user_shell_context_->GetStoryProvider(story_provider_.NewRequest());
-    user_shell_context_->GetSuggestionProvider(
+    session_shell_context_ = startup_context->ConnectToEnvironmentService<
+        fuchsia::modular::SessionShellContext>();
+    session_shell_context_->GetStoryProvider(story_provider_.NewRequest());
+    session_shell_context_->GetSuggestionProvider(
         suggestion_provider_.NewRequest());
-    user_shell_context_->GetFocusController(focus_controller_.NewRequest());
-    user_shell_context_->GetVisibleStoriesController(
+    session_shell_context_->GetFocusController(focus_controller_.NewRequest());
+    session_shell_context_->GetVisibleStoriesController(
         visible_stories_controller_.NewRequest());
 
     suggestion_provider_->SubscribeToInterruptions(
@@ -81,7 +80,7 @@
         next_listener_bindings_.AddBinding(this), 3);
   }
 
-  ~DevUserShellApp() override = default;
+  ~DevSessionShellApp() override = default;
 
  private:
   // |ViewApp|
@@ -99,7 +98,7 @@
     FXL_CHECK(!!view_owner_request_);
     FXL_CHECK(!!story_provider_);
     FXL_CHECK(!!puppet_master_);
-    FXL_LOG(INFO) << "DevUserShell START " << settings_.root_module << " "
+    FXL_LOG(INFO) << "DevSessionShell START " << settings_.root_module << " "
                   << settings_.root_link;
 
     view_ = std::make_unique<modular::ViewHost>(
@@ -174,7 +173,7 @@
 
     story_controller_->Watch(story_watcher_binding_.NewBinding());
 
-    FXL_LOG(INFO) << "DevUserShell Starting story with id: " << story_id;
+    FXL_LOG(INFO) << "DevSessionShell Starting story with id: " << story_id;
     fidl::InterfaceHandle<fuchsia::ui::viewsv1token::ViewOwner>
         root_module_view;
     story_controller_->Start(root_module_view.NewRequest());
@@ -200,7 +199,7 @@
 
   // |fuchsia::modular::StoryWatcher|
   void OnStateChange(fuchsia::modular::StoryState state) override {
-    FXL_LOG(INFO) << "DevUserShell State " << fidl::ToUnderlying(state);
+    FXL_LOG(INFO) << "DevSessionShell State " << fidl::ToUnderlying(state);
   }
 
   // |fuchsia::modular::StoryWatcher|
@@ -214,7 +213,7 @@
   void OnNextResults(
       fidl::VectorPtr<fuchsia::modular::Suggestion> suggestions) override {
     FXL_VLOG(4)
-        << "DevUserShell/fuchsia::modular::NextListener::OnNextResults()";
+        << "DevSessionShell/fuchsia::modular::NextListener::OnNextResults()";
     for (auto& suggestion : *suggestions) {
       FXL_LOG(INFO) << "  " << suggestion.uuid << " "
                     << suggestion.display.headline;
@@ -223,15 +222,15 @@
 
   // |fuchsia::modular::InterruptionListener|
   void OnInterrupt(fuchsia::modular::Suggestion suggestion) override {
-    FXL_VLOG(4)
-        << "DevUserShell/fuchsia::modular::InterruptionListener::OnInterrupt() "
-        << suggestion.uuid;
+    FXL_VLOG(4) << "DevSessionShell/"
+                   "fuchsia::modular::InterruptionListener::OnInterrupt() "
+                << suggestion.uuid;
   }
 
   // |fuchsia::modular::NextListener|
   void OnProcessingChange(bool processing) override {
     FXL_VLOG(4)
-        << "DevUserShell/fuchsia::modular::NextListener::OnProcessingChange("
+        << "DevSessionShell/fuchsia::modular::NextListener::OnProcessingChange("
         << processing << ")";
   }
 
@@ -241,7 +240,7 @@
       view_owner_request_;
   std::unique_ptr<modular::ViewHost> view_;
 
-  fuchsia::modular::UserShellContextPtr user_shell_context_;
+  fuchsia::modular::SessionShellContextPtr session_shell_context_;
   fuchsia::modular::PuppetMasterPtr puppet_master_;
   fuchsia::modular::StoryPuppetMasterPtr story_puppet_master_;
   fuchsia::modular::StoryProviderPtr story_provider_;
@@ -256,7 +255,7 @@
       interruption_listener_bindings_;
   fidl::BindingSet<fuchsia::modular::NextListener> next_listener_bindings_;
 
-  FXL_DISALLOW_COPY_AND_ASSIGN(DevUserShellApp);
+  FXL_DISALLOW_COPY_AND_ASSIGN(DevSessionShellApp);
 };
 
 }  // namespace
@@ -268,9 +267,9 @@
   async::Loop loop(&kAsyncLoopConfigAttachToThread);
 
   auto context = component::StartupContext::CreateFromStartupInfo();
-  modular::AppDriver<DevUserShellApp> driver(
+  modular::AppDriver<DevSessionShellApp> driver(
       context->outgoing().deprecated_services(),
-      std::make_unique<DevUserShellApp>(context.get(), std::move(settings)),
+      std::make_unique<DevSessionShellApp>(context.get(), std::move(settings)),
       [&loop] { loop.Quit(); });
 
   loop.Run();
diff --git a/bin/sessionmgr/sessionmgr_impl.cc b/bin/sessionmgr/sessionmgr_impl.cc
index e640773..7593ead 100644
--- a/bin/sessionmgr/sessionmgr_impl.cc
+++ b/bin/sessionmgr/sessionmgr_impl.cc
@@ -60,8 +60,8 @@
 constexpr char kModuleResolverUrl[] = "module_resolver";
 constexpr char kUserEnvironmentLabelPrefix[] = "user-";
 constexpr char kMessageQueuePath[] = "/data/MESSAGE_QUEUES/v1/";
-constexpr char kUserShellComponentNamespace[] = "user-shell-namespace";
-constexpr char kUserShellLinkName[] = "user-shell-link";
+constexpr char kSessionShellComponentNamespace[] = "user-shell-namespace";
+constexpr char kSessionShellLinkName[] = "user-shell-link";
 constexpr char kLedgerDashboardUrl[] = "ledger_dashboard";
 constexpr char kLedgerDashboardEnvLabel[] = "ledger-dashboard";
 constexpr char kClipboardAgentUrl[] = "clipboard_agent";
@@ -133,9 +133,9 @@
   void GetPresentation(fidl::StringPtr story_id,
                        fidl::InterfaceRequest<fuchsia::ui::policy::Presentation>
                            request) override {
-    if (impl_->user_shell_app_) {
-      fuchsia::modular::UserShellPresentationProviderPtr provider;
-      impl_->user_shell_app_->services().ConnectToService(
+    if (impl_->session_shell_app_) {
+      fuchsia::modular::SessionShellPresentationProviderPtr provider;
+      impl_->session_shell_app_->services().ConnectToService(
           provider.NewRequest());
       provider->GetPresentation(std::move(story_id), std::move(request));
     }
@@ -145,9 +145,9 @@
       fidl::StringPtr story_id,
       fidl::InterfaceHandle<fuchsia::modular::StoryVisualStateWatcher> watcher)
       override {
-    if (impl_->user_shell_app_) {
-      fuchsia::modular::UserShellPresentationProviderPtr provider;
-      impl_->user_shell_app_->services().ConnectToService(
+    if (impl_->session_shell_app_) {
+      fuchsia::modular::SessionShellPresentationProviderPtr provider;
+      impl_->session_shell_app_->services().ConnectToService(
           provider.NewRequest());
       provider->WatchVisualState(std::move(story_id), std::move(watcher));
     }
@@ -174,7 +174,7 @@
 
 void SessionmgrImpl::Initialize(
     fuchsia::modular::auth::AccountPtr account,
-    fuchsia::modular::AppConfig user_shell,
+    fuchsia::modular::AppConfig session_shell,
     fuchsia::modular::AppConfig story_shell,
     fidl::InterfaceHandle<fuchsia::modular::auth::TokenProviderFactory>
         token_provider_factory,
@@ -189,9 +189,10 @@
   InitializeLedgerDashboard();
   InitializeDeviceMap();
   InitializeMessageQueueManager();
-  InitializeMaxwellAndModular(user_shell.url, std::move(story_shell));
+  InitializeMaxwellAndModular(session_shell.url, std::move(story_shell));
   InitializeClipboard();
-  InitializeUserShell(std::move(user_shell), std::move(view_owner_request));
+  InitializeSessionShell(std::move(session_shell),
+                         std::move(view_owner_request));
 
   ReportEvent(ModularEvent::BOOTED_TO_SESSIONMGR);
 }
@@ -418,7 +419,7 @@
 }
 
 void SessionmgrImpl::InitializeMaxwellAndModular(
-    const fidl::StringPtr& user_shell_url,
+    const fidl::StringPtr& session_shell_url,
     fuchsia::modular::AppConfig story_shell) {
   // NOTE: There is an awkward service exchange here between
   // AgentRunner, StoryProviderImpl, FocusHandler, VisibleStoriesHandler.
@@ -586,11 +587,12 @@
   AtEnd(Reset(&module_resolver_service_));
   // End kModuleResolverUrl
 
-  user_shell_component_context_impl_ = std::make_unique<ComponentContextImpl>(
-      component_context_info, kUserShellComponentNamespace, user_shell_url,
-      user_shell_url);
+  session_shell_component_context_impl_ =
+      std::make_unique<ComponentContextImpl>(
+          component_context_info, kSessionShellComponentNamespace,
+          session_shell_url, session_shell_url);
 
-  AtEnd(Reset(&user_shell_component_context_impl_));
+  AtEnd(Reset(&session_shell_component_context_impl_));
 
   fidl::InterfacePtr<fuchsia::modular::FocusProvider>
       focus_provider_story_provider;
@@ -681,100 +683,114 @@
   AtEnd(Reset(&visible_stories_handler_));
 }
 
-void SessionmgrImpl::InitializeUserShell(
-    fuchsia::modular::AppConfig user_shell,
+void SessionmgrImpl::InitializeSessionShell(
+    fuchsia::modular::AppConfig session_shell,
     fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>
         view_owner_request) {
-  // We setup our own view and make the fuchsia::modular::UserShell a child of
-  // it.
-  user_shell_view_host_ = std::make_unique<ViewHost>(
+  // We setup our own view and make the fuchsia::modular::SessionShell a child
+  // of it.
+  session_shell_view_host_ = std::make_unique<ViewHost>(
       startup_context_
           ->ConnectToEnvironmentService<fuchsia::ui::viewsv1::ViewManager>(),
       std::move(view_owner_request));
-  RunUserShell(std::move(user_shell));
-  AtEnd([this](std::function<void()> cont) { TerminateUserShell(cont); });
+  RunSessionShell(std::move(session_shell));
+  AtEnd([this](std::function<void()> cont) { TerminateSessionShell(cont); });
 }
 
-void SessionmgrImpl::RunUserShell(fuchsia::modular::AppConfig user_shell) {
-  // |user_shell_services_| is a ServiceProvider (aka a Directory) that will
-  // be used to augment the user shell's namespace.
-  user_shell_services_.AddService<fuchsia::modular::UserShellContext>(
+void SessionmgrImpl::RunSessionShell(
+    fuchsia::modular::AppConfig session_shell) {
+  // |session_shell_services_| is a ServiceProvider (aka a Directory) that will
+  // be used to augment the session shell's namespace.
+  session_shell_services_.AddService<fuchsia::modular::SessionShellContext>(
+      [this](fidl::InterfaceRequest<fuchsia::modular::SessionShellContext>
+                 request) {
+        session_shell_context_bindings_.AddBinding(this, std::move(request));
+      });
+  session_shell_services_.AddService<fuchsia::modular::UserShellContext>(
       [this](
           fidl::InterfaceRequest<fuchsia::modular::UserShellContext> request) {
         user_shell_context_bindings_.AddBinding(this, std::move(request));
       });
-  user_shell_services_.AddService<fuchsia::modular::PuppetMaster>(
+  session_shell_services_.AddService<fuchsia::modular::PuppetMaster>(
       [this](fidl::InterfaceRequest<fuchsia::modular::PuppetMaster> request) {
         puppet_master_impl_->Connect(std::move(request));
       });
-  // |user_shell_service_provider_| is an InterfacePtr impl for ServiceProvider
-  // that binds to |user_shell_services_|.
-  fuchsia::sys::ServiceProviderPtr user_shell_service_provider_ptr_;
-  user_shell_services_.AddBinding(
-      user_shell_service_provider_ptr_.NewRequest());
+  // |session_shell_service_provider_| is an InterfacePtr impl for
+  // ServiceProvider that binds to |session_shell_services_|.
+  fuchsia::sys::ServiceProviderPtr session_shell_service_provider_ptr_;
+  session_shell_services_.AddBinding(
+      session_shell_service_provider_ptr_.NewRequest());
 
   // |service_list| specifies which services are available to the child
   // component from which ServiceProvicer. There is a lot of indirection here.
   auto service_list = fuchsia::sys::ServiceList::New();
+  service_list->names.push_back(fuchsia::modular::SessionShellContext::Name_);
   service_list->names.push_back(fuchsia::modular::UserShellContext::Name_);
   service_list->names.push_back(fuchsia::modular::PuppetMaster::Name_);
-  service_list->provider = std::move(user_shell_service_provider_ptr_);
+  service_list->provider = std::move(session_shell_service_provider_ptr_);
 
-  user_shell_app_ = std::make_unique<AppClient<fuchsia::modular::Lifecycle>>(
-      user_environment_->GetLauncher(), std::move(user_shell),
+  session_shell_app_ = std::make_unique<AppClient<fuchsia::modular::Lifecycle>>(
+      user_environment_->GetLauncher(), std::move(session_shell),
       /* data_origin = */ "", std::move(service_list));
 
-  user_shell_app_->SetAppErrorHandler([this] {
-    FXL_LOG(ERROR) << "User Shell seems to have crashed unexpectedly."
+  session_shell_app_->SetAppErrorHandler([this] {
+    FXL_LOG(ERROR) << "Session Shell seems to have crashed unexpectedly."
                    << "Logging out.";
     Logout();
   });
 
   fuchsia::ui::viewsv1token::ViewOwnerPtr view_owner;
   fuchsia::ui::viewsv1::ViewProviderPtr view_provider;
-  user_shell_app_->services().ConnectToService(view_provider.NewRequest());
+  session_shell_app_->services().ConnectToService(view_provider.NewRequest());
   view_provider->CreateView(view_owner.NewRequest(), nullptr);
-  user_shell_view_host_->ConnectView(std::move(view_owner));
+  session_shell_view_host_->ConnectView(std::move(view_owner));
 }
 
-void SessionmgrImpl::TerminateUserShell(const std::function<void()>& done) {
-  user_shell_app_->Teardown(kBasicTimeout, [this, done] {
-    user_shell_app_.reset();
+void SessionmgrImpl::TerminateSessionShell(const std::function<void()>& done) {
+  session_shell_app_->Teardown(kBasicTimeout, [this, done] {
+    session_shell_app_.reset();
     done();
   });
 }
 
-class SessionmgrImpl::SwapUserShellOperation : public Operation<> {
+class SessionmgrImpl::SwapSessionShellOperation : public Operation<> {
  public:
-  SwapUserShellOperation(SessionmgrImpl* const sessionmgr_impl,
-                         fuchsia::modular::AppConfig user_shell_config,
-                         ResultCall result_call)
-      : Operation("SessionmgrImpl::SwapUserShellOperation",
+  SwapSessionShellOperation(SessionmgrImpl* const sessionmgr_impl,
+                            fuchsia::modular::AppConfig session_shell_config,
+                            ResultCall result_call)
+      : Operation("SessionmgrImpl::SwapSessionShellOperation",
                   std::move(result_call)),
         sessionmgr_impl_(sessionmgr_impl),
-        user_shell_config_(std::move(user_shell_config)) {}
+        session_shell_config_(std::move(session_shell_config)) {}
 
  private:
   void Run() override {
     FlowToken flow{this};
     sessionmgr_impl_->story_provider_impl_->StopAllStories([this, flow] {
-      sessionmgr_impl_->TerminateUserShell([this, flow] {
-        sessionmgr_impl_->RunUserShell(std::move(user_shell_config_));
+      sessionmgr_impl_->TerminateSessionShell([this, flow] {
+        sessionmgr_impl_->RunSessionShell(std::move(session_shell_config_));
       });
     });
   }
 
   SessionmgrImpl* const sessionmgr_impl_;
-  fuchsia::modular::AppConfig user_shell_config_;
+  fuchsia::modular::AppConfig session_shell_config_;
 
-  FXL_DISALLOW_COPY_AND_ASSIGN(SwapUserShellOperation);
+  FXL_DISALLOW_COPY_AND_ASSIGN(SwapSessionShellOperation);
 };
 
 void SessionmgrImpl::SwapUserShell(
     fuchsia::modular::AppConfig user_shell_config,
     SwapUserShellCallback callback) {
-  operation_queue_.Add(
-      new SwapUserShellOperation(this, std::move(user_shell_config), callback));
+  operation_queue_.Add(new SwapSessionShellOperation(
+      this, std::move(user_shell_config), callback));
+}
+
+void SessionmgrImpl::SwapSessionShell(
+    fuchsia::modular::AppConfig session_shell_config,
+    SwapSessionShellCallback callback) {
+  operation_queue_.Add(new SwapSessionShellOperation(
+      this, std::move(session_shell_config), callback));
 }
 
 void SessionmgrImpl::Terminate(std::function<void()> done) {
@@ -784,7 +800,9 @@
   TerminateRecurse(at_end_.size() - 1);
 }
 
-void SessionmgrImpl::GetAccount(GetAccountCallback callback) {
+void SessionmgrImpl::GetAccount(
+    std::function<void(::std::unique_ptr<::fuchsia::modular::auth::Account>)>
+        callback) {
   callback(fidl::Clone(account_));
 }
 
@@ -795,10 +813,11 @@
 
 void SessionmgrImpl::GetComponentContext(
     fidl::InterfaceRequest<fuchsia::modular::ComponentContext> request) {
-  user_shell_component_context_impl_->Connect(std::move(request));
+  session_shell_component_context_impl_->Connect(std::move(request));
 }
 
-void SessionmgrImpl::GetDeviceName(GetDeviceNameCallback callback) {
+void SessionmgrImpl::GetDeviceName(
+    std::function<void(::fidl::StringPtr)> callback) {
   callback(device_name_);
 }
 
@@ -822,17 +841,17 @@
 
 void SessionmgrImpl::GetLink(
     fidl::InterfaceRequest<fuchsia::modular::Link> request) {
-  if (!user_shell_storage_) {
-    user_shell_storage_ = std::make_unique<StoryStorage>(
+  if (!session_shell_storage_) {
+    session_shell_storage_ = std::make_unique<StoryStorage>(
         ledger_client_.get(), fuchsia::ledger::PageId());
   }
 
   fuchsia::modular::LinkPath link_path;
   link_path.module_path.resize(0);
-  link_path.link_name = kUserShellLinkName;
-  auto impl = std::make_unique<LinkImpl>(user_shell_storage_.get(),
+  link_path.link_name = kSessionShellLinkName;
+  auto impl = std::make_unique<LinkImpl>(session_shell_storage_.get(),
                                          std::move(link_path));
-  user_shell_link_bindings_.AddBinding(std::move(impl), std::move(request));
+  session_shell_link_bindings_.AddBinding(std::move(impl), std::move(request));
 }
 
 void SessionmgrImpl::GetPresentation(
diff --git a/bin/sessionmgr/sessionmgr_impl.h b/bin/sessionmgr/sessionmgr_impl.h
index f0cd32b..e37db42 100644
--- a/bin/sessionmgr/sessionmgr_impl.h
+++ b/bin/sessionmgr/sessionmgr_impl.h
@@ -53,6 +53,7 @@
 class VisibleStoriesHandler;
 
 class SessionmgrImpl : fuchsia::modular::internal::Sessionmgr,
+                       fuchsia::modular::SessionShellContext,
                        fuchsia::modular::UserShellContext,
                        EntityProviderLauncher {
  public:
@@ -84,7 +85,7 @@
   // |Sessionmgr|
   void Initialize(
       fuchsia::modular::auth::AccountPtr account,
-      fuchsia::modular::AppConfig user_shell,
+      fuchsia::modular::AppConfig session_shell,
       fuchsia::modular::AppConfig story_shell,
       fidl::InterfaceHandle<fuchsia::modular::auth::TokenProviderFactory>
           token_provider_factory,
@@ -95,10 +96,15 @@
       fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>
           view_owner_request) override;
 
+  // DEPRECATED: Use SwapSessionShell instead.
   // |Sessionmgr|
   void SwapUserShell(fuchsia::modular::AppConfig user_shell_config,
                      SwapUserShellCallback callback) override;
 
+  // |Sessionmgr|
+  void SwapSessionShell(fuchsia::modular::AppConfig session_shell_config,
+                        SwapSessionShellCallback callback) override;
+
   // Sequence of Initialize() broken up into steps for clarity.
   void InitializeUser(
       fuchsia::modular::auth::AccountPtr account,
@@ -113,30 +119,32 @@
   void InitializeDeviceMap();
   void InitializeClipboard();
   void InitializeMessageQueueManager();
-  void InitializeMaxwellAndModular(const fidl::StringPtr& user_shell_url,
+  void InitializeMaxwellAndModular(const fidl::StringPtr& session_shell_url,
                                    fuchsia::modular::AppConfig story_shell);
-  void InitializeUserShell(
-      fuchsia::modular::AppConfig user_shell,
+  void InitializeSessionShell(
+      fuchsia::modular::AppConfig session_shell,
       fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>
           view_owner_request);
 
-  void RunUserShell(fuchsia::modular::AppConfig user_shell);
+  void RunSessionShell(fuchsia::modular::AppConfig session_shell);
   // This is a termination sequence that may be used with |AtEnd()|, but also
-  // may be executed to terminate the currently running user shell.
-  void TerminateUserShell(const std::function<void()>& done);
+  // may be executed to terminate the currently running session shell.
+  void TerminateSessionShell(const std::function<void()>& done);
 
   // Returns the file descriptor that backs the ledger repository directory for
   // the user.
   zx::channel GetLedgerRepositoryDirectory();
 
-  // |fuchsia::modular::UserShellContext|
-  void GetAccount(GetAccountCallback callback) override;
+  // |fuchsia::modular::SessionShellContext|
+  void GetAccount(
+      std::function<void(::std::unique_ptr<::fuchsia::modular::auth::Account>)>
+          callback) override;
   void GetAgentProvider(
       fidl::InterfaceRequest<fuchsia::modular::AgentProvider> request) override;
   void GetComponentContext(
       fidl::InterfaceRequest<fuchsia::modular::ComponentContext> request)
       override;
-  void GetDeviceName(GetDeviceNameCallback callback) override;
+  void GetDeviceName(std::function<void(::fidl::StringPtr)> callback) override;
   void GetFocusController(
       fidl::InterfaceRequest<fuchsia::modular::FocusController> request)
       override;
@@ -203,7 +211,9 @@
   std::unique_ptr<scoped_tmpfs::ScopedTmpFS> memfs_for_ledger_;
 
   fidl::BindingSet<fuchsia::modular::internal::Sessionmgr> bindings_;
-  component::ServiceProviderImpl user_shell_services_;
+  component::ServiceProviderImpl session_shell_services_;
+  fidl::BindingSet<fuchsia::modular::SessionShellContext>
+      session_shell_context_bindings_;
   fidl::BindingSet<fuchsia::modular::UserShellContext>
       user_shell_context_bindings_;
 
@@ -227,8 +237,8 @@
 
   std::unique_ptr<AppClient<fuchsia::modular::Lifecycle>> context_engine_app_;
   std::unique_ptr<AppClient<fuchsia::modular::Lifecycle>> module_resolver_app_;
-  std::unique_ptr<AppClient<fuchsia::modular::Lifecycle>> user_shell_app_;
-  std::unique_ptr<ViewHost> user_shell_view_host_;
+  std::unique_ptr<AppClient<fuchsia::modular::Lifecycle>> session_shell_app_;
+  std::unique_ptr<ViewHost> session_shell_view_host_;
 
   std::unique_ptr<EntityProviderRunner> entity_provider_runner_;
 
@@ -270,16 +280,16 @@
   std::unique_ptr<FocusHandler> focus_handler_;
   std::unique_ptr<VisibleStoriesHandler> visible_stories_handler_;
 
-  // Component context given to user shell so that it can run agents and
+  // Component context given to session shell so that it can run agents and
   // create message queues.
-  std::unique_ptr<ComponentContextImpl> user_shell_component_context_impl_;
+  std::unique_ptr<ComponentContextImpl> session_shell_component_context_impl_;
 
-  // Given to the user shell so it can store its own data. These data are
-  // shared between all user shells (so it's not private to the user shell
+  // Given to the session shell so it can store its own data. These data are
+  // shared between all session shells (so it's not private to the session shell
   // *app*).
-  std::unique_ptr<StoryStorage> user_shell_storage_;
+  std::unique_ptr<StoryStorage> session_shell_storage_;
   fidl::BindingSet<fuchsia::modular::Link, std::unique_ptr<LinkImpl>>
-      user_shell_link_bindings_;
+      session_shell_link_bindings_;
 
   // For the Ledger Debug Dashboard
   std::unique_ptr<Environment> ledger_dashboard_environment_;
@@ -300,7 +310,7 @@
   // The agent controller used to control the clipboard agent.
   fuchsia::modular::AgentControllerPtr clipboard_agent_controller_;
 
-  class SwapUserShellOperation;
+  class SwapSessionShellOperation;
 
   OperationQueue operation_queue_;
 
diff --git a/bin/sessionmgr/storage/story_storage.cc b/bin/sessionmgr/storage/story_storage.cc
index 210e772..ec786ed 100644
--- a/bin/sessionmgr/storage/story_storage.cc
+++ b/bin/sessionmgr/storage/story_storage.cc
@@ -805,7 +805,7 @@
     }
   } else if (!StartsWith(key, kEntityNamePrefix)) {
     // TODO(thatguy): We store some Link data on the root page (where
-    // StoryData is stored) for the user shell to make use of. This means we
+    // StoryData is stored) for the session shell to make use of. This means we
     // get notified in that instance of changes we don't care about.
     //
     // Consider putting all story-scoped data under a shared prefix, and use
diff --git a/bin/sessionmgr/story_runner/story_controller_impl.h b/bin/sessionmgr/story_runner/story_controller_impl.h
index 8bcc4fc..161dc98 100644
--- a/bin/sessionmgr/story_runner/story_controller_impl.h
+++ b/bin/sessionmgr/story_runner/story_controller_impl.h
@@ -216,7 +216,7 @@
 
   bool IsExternalModule(const fidl::VectorPtr<fidl::StringPtr>& module_path);
 
-  // Handles UserShell OnModuleFocused event that indicates whether or not a
+  // Handles SessionShell OnModuleFocused event that indicates whether or not a
   // view was focused.
   void OnViewFocused(fidl::StringPtr view_id);
 
diff --git a/bin/sessionmgr/story_runner/story_provider_impl.h b/bin/sessionmgr/story_runner/story_provider_impl.h
index b3ccba7..5ee504d 100644
--- a/bin/sessionmgr/story_runner/story_provider_impl.h
+++ b/bin/sessionmgr/story_runner/story_provider_impl.h
@@ -124,7 +124,7 @@
       fidl::VectorPtr<fuchsia::modular::OngoingActivityType>
           ongoing_activities);
 
-  // Called by StoryControllerImpl. Sends request to fuchsia::modular::UserShell
+  // Called by StoryControllerImpl. Sends request to fuchsia::modular::SessionShell
   // through PresentationProvider.
   void GetPresentation(
       fidl::StringPtr story_id,
diff --git a/bin/suggestion_engine/suggestion_engine_impl.cc b/bin/suggestion_engine/suggestion_engine_impl.cc
index 04dfa0a..f4998aa 100644
--- a/bin/suggestion_engine/suggestion_engine_impl.cc
+++ b/bin/suggestion_engine/suggestion_engine_impl.cc
@@ -235,8 +235,8 @@
     case fuchsia::modular::InteractionType::EXPIRED:
     case fuchsia::modular::InteractionType::SNOOZED: {
       // No need to remove since it was either expired by a timeout in
-      // user shell or snoozed by the user, however we should still refresh the
-      // next processor (if not in ask) given that `interrupting=false` set
+      // session shell or snoozed by the user, however we should still refresh
+      // the next processor (if not in ask) given that `interrupting=false` set
       // above.
       if (!suggestion_in_ask) {
         next_processor_.UpdateRanking();
diff --git a/bin/test_driver/README.md b/bin/test_driver/README.md
index f8f27f5..e848635 100644
--- a/bin/test_driver/README.md
+++ b/bin/test_driver/README.md
@@ -13,7 +13,7 @@
   "tests": [
     {
       "name": "driver_example_mod_tap_tests",
-      "exec": "basemgr --test --enable_presenter --account_provider=dev_token_manager --base_shell=dev_base_shell --base_shell_args=--test_timeout_ms=60000 --user_shell=dev_user_shell --user_shell_args=--root_module=test_driver_module,--module_under_test_url=driver_example_mod_wrapper,--test_driver_url=driver_example_mod_target_tests --story_shell=dev_story_shell"
+      "exec": "basemgr --test --enable_presenter --account_provider=dev_token_manager --base_shell=dev_base_shell --base_shell_args=--test_timeout_ms=60000 --session_shell=dev_session_shell --session_shell_args=--root_module=test_driver_module,--module_under_test_url=driver_example_mod_wrapper,--test_driver_url=driver_example_mod_target_tests --story_shell=dev_story_shell"
     }
   ]
 }
diff --git a/docs/modular/getting_started.md b/docs/modular/getting_started.md
index 8ccf74d..da4e421 100644
--- a/docs/modular/getting_started.md
+++ b/docs/modular/getting_started.md
@@ -10,7 +10,7 @@
 
 To be able to run modules from the Fuchsia command line, you need to select a
 Fuchsia build configuration that does not start `basemgr` and shows a
-graphical user shell right at boot time. You can use for example the
+graphical session shell right at boot time. You can use for example the
 `test_modular` configuration in `fx set` and build as follows:
 
 ``` sh
@@ -23,24 +23,24 @@
 
 ## Running
 
-An application can be run as a module in a story using `dev_user_shell`. For
+An application can be run as a module in a story using `dev_session_shell`. For
 example (from [test runner invocation]):
 
 ```
 basemgr --test --account_provider=dev_token_manager \
-  --base_shell=dev_base_shell --user_shell=dev_user_shell \
+  --base_shell=dev_base_shell --session_shell=dev_session_shell \
   --story_shell=dev_story_shell \
-  --user_shell_args=--root_module=parent_child_test_parent_module
+  --session_shell_args=--root_module=parent_child_test_parent_module
 ```
 
 `dev_base_shell` is used to log in a dummy user directly without going through
-an authentication dialog. `dev_user_shell` runs the module given to it in
-`--user_shell_args` in a story.
+an authentication dialog. `dev_session_shell` runs the module given to it in
+`--session_shell_args` in a story.
 
-The flags `--user_shell` and `--user_shell_args` are read by `basemgr`.
-The value of `--user_shell` is the application that is run as the user shell.
-The value of `--user_shell_args` is a comma separated list of arguments passed
-to the user shell application. In this example, these arguments are in turn more
+The flags `--session_shell` and `--session_shell_args` are read by `basemgr`.
+The value of `--session_shell` is the application that is run as the session shell.
+The value of `--session_shell_args` is a comma separated list of arguments passed
+to the session shell application. In this example, these arguments are in turn more
 flags. Commas inside the value of such arguments are escaped by backslashes. The
 value of `--root_module` selects the module to run. The value of `--root_link`
 is a JSON representation of the initial data the module is started with.
diff --git a/docs/modular/multiple_qemu_instances.md b/docs/modular/multiple_qemu_instances.md
index c21804f..67fef54 100644
--- a/docs/modular/multiple_qemu_instances.md
+++ b/docs/modular/multiple_qemu_instances.md
@@ -101,18 +101,18 @@
 1. Start a todo story on one side:
 
 ```
-basemgr --user_shell=dev_user_shell --user_shell_args=--root_module=example_todo_story
+basemgr --session_shell=dev_session_shell --session_shell_args=--root_module=example_todo_story
 
 ```
 
 2. Retrieve the story id from the log output, then start the same story on the other side:
 
 ```
-basemgr --user_shell=dev_user_shell --user_shell_args='--story_id=CmfpuRWuBo'
+basemgr --session_shell=dev_session_shell --session_shell_args='--story_id=CmfpuRWuBo'
 
 ```
 
-You can also just run the default user shell and restart stories from the timeline.
+You can also just run the default session shell and restart stories from the timeline.
 
 [qemu]: https://fuchsia.googlesource.com/zircon/+/master/docs/qemu.md "QEMU"
 [fuchsia]: https://fuchsia.googlesource.com/docs/+/HEAD/getting_started.md#Enabling-Network "Fuchsia Network"
diff --git a/examples/todo_cpp/README.md b/examples/todo_cpp/README.md
index 60db973..36ef755 100644
--- a/examples/todo_cpp/README.md
+++ b/examples/todo_cpp/README.md
@@ -5,7 +5,7 @@
 To run the module, run:
 
 ```
-basemgr --base_shell=dev_base_shell --user_shell=dev_user_shell --user_shell_args=--root_module=example_todo_headless
+basemgr --base_shell=dev_base_shell --session_shell=dev_session_shell --session_shell_args=--root_module=example_todo_headless
 ```
 
 This is a headless module, taking no input and writing the output to stdout.
diff --git a/lib/BUILD.gn b/lib/BUILD.gn
index e7b8946..fb35de3 100644
--- a/lib/BUILD.gn
+++ b/lib/BUILD.gn
@@ -20,7 +20,7 @@
     "//peridot/lib/rng:unittests",
     "//peridot/lib/scoped_tmpfs:unittests",
     "//peridot/lib/socket:unittests",
-    "//peridot/lib/user_shell_settings:unittests",
+    "//peridot/lib/session_shell_settings:unittests",
     "//peridot/lib/util:unittests",
     "//third_party/googletest:gtest_main",
   ]
diff --git a/lib/common/names.h b/lib/common/names.h
index 2cf9f8e..af2fb01 100644
--- a/lib/common/names.h
+++ b/lib/common/names.h
@@ -13,8 +13,8 @@
 constexpr char kRootModuleName[] = "root";
 
 // The service name of the Presentation service that is routed between
-// BaseShell and UserShell. The same service exchange between UserShell and
-// StoryShell uses the UserShellPresentationProvider service, which is
+// BaseShell and SessionShell. The same service exchange between SessionShell and
+// StoryShell uses the SessionShellPresentationProvider service, which is
 // discoverable.
 // TODO(SCN-595): mozart.Presentation is being renamed to ui.Presenter.
 constexpr char kPresentationService[] = "mozart.Presentation";
diff --git a/lib/user_shell_settings/BUILD.gn b/lib/session_shell_settings/BUILD.gn
similarity index 64%
rename from lib/user_shell_settings/BUILD.gn
rename to lib/session_shell_settings/BUILD.gn
index 5d1411b..4607a53 100644
--- a/lib/user_shell_settings/BUILD.gn
+++ b/lib/session_shell_settings/BUILD.gn
@@ -6,14 +6,14 @@
   testonly = true
 
   deps = [
-    ":user_shell_settings_unittest",
+    ":session_shell_settings_unittest",
   ]
 }
 
-source_set("user_shell_settings") {
+source_set("session_shell_settings") {
   sources = [
-    "user_shell_settings.cc",
-    "user_shell_settings.h",
+    "session_shell_settings.cc",
+    "session_shell_settings.h",
   ]
 
   public_deps = [
@@ -22,15 +22,15 @@
   ]
 }
 
-source_set("user_shell_settings_unittest") {
+source_set("session_shell_settings_unittest") {
   testonly = true
 
   sources = [
-    "user_shell_settings_test.cc",
+    "session_shell_settings_test.cc",
   ]
 
   deps = [
-    ":user_shell_settings",
+    ":session_shell_settings",
     "//garnet/public/lib/fxl",
     "//third_party/googletest:gtest_main",
   ]
diff --git a/lib/user_shell_settings/user_shell_settings.cc b/lib/session_shell_settings/session_shell_settings.cc
similarity index 77%
rename from lib/user_shell_settings/user_shell_settings.cc
rename to lib/session_shell_settings/session_shell_settings.cc
index 4f1dd5c..bba6b21 100644
--- a/lib/user_shell_settings/user_shell_settings.cc
+++ b/lib/session_shell_settings/session_shell_settings.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "peridot/lib/user_shell_settings/user_shell_settings.h"
+#include "peridot/lib/session_shell_settings/session_shell_settings.h"
 
 #include <cmath>
 
@@ -17,7 +17,7 @@
 
 constexpr char kBaseShellConfigJsonPath[] =
     "/system/data/sysui/base_shell_config.json";
-std::vector<UserShellSettings>* g_system_settings;
+std::vector<SessionShellSettings>* g_system_settings;
 
 }  // namespace
 
@@ -80,7 +80,7 @@
   }
 
   // Keep in sync with
-  // <https://fuchsia.googlesource.com/topaz/+/master/lib/base_shell/lib/user_shell_chooser.dart#64>.
+  // <https://fuchsia.googlesource.com/topaz/+/master/lib/base_shell/lib/session_shell_chooser.dart#64>.
   if (str == "handheld") {
     return fuchsia::ui::policy::DisplayUsage::kHandheld;
   } else if (str == "close") {
@@ -97,29 +97,30 @@
   }
 };
 
-// Given a |json| string, parses it into list of user shell settings.
-std::vector<UserShellSettings> ParseUserShellSettings(const std::string& json) {
-  // TODO(MI4-1166): topaz/lib/base_shell/lib/user_shell_chooser.dart is a
+// Given a |json| string, parses it into list of session shell settings.
+std::vector<SessionShellSettings> ParseSessionShellSettings(
+    const std::string& json) {
+  // TODO(MI4-1166): topaz/lib/base_shell/lib/session_shell_chooser.dart is a
   // similar implementation of this in Dart. One of the two implementations
   // could probably be removed now.
 
-  std::vector<UserShellSettings> settings;
+  std::vector<SessionShellSettings> settings;
 
   rapidjson::Document document;
   document.Parse(json.c_str());
   if (document.HasParseError()) {
-    FXL_LOG(ERROR) << "ParseUserShellSettings(): parse error "
+    FXL_LOG(ERROR) << "ParseSessionShellSettings(): parse error "
                    << document.GetParseError();
     return settings;
   }
 
   if (!document.IsArray()) {
-    FXL_LOG(ERROR) << "ParseUserShellSettings(): root item isn't an array";
+    FXL_LOG(ERROR) << "ParseSessionShellSettings(): root item isn't an array";
     return settings;
   }
 
   if (document.Empty()) {
-    FXL_LOG(ERROR) << "ParseUserShellSettings(): root array is empty";
+    FXL_LOG(ERROR) << "ParseSessionShellSettings(): root array is empty";
     return settings;
   }
 
@@ -128,18 +129,18 @@
   for (rapidjson::SizeType i = 0; i < document.Size(); i++) {
     using modular::internal::GetObjectValue;
 
-    const auto& user_shell = document[i];
+    const auto& session_shell = document[i];
 
-    const auto& name = GetObjectValue<std::string>(user_shell, "name");
+    const auto& name = GetObjectValue<std::string>(session_shell, "name");
     if (name.empty())
       continue;
 
     settings.push_back({
-        .name = GetObjectValue<std::string>(user_shell, "name"),
-        .screen_width = GetObjectValue<float>(user_shell, "screen_width"),
-        .screen_height = GetObjectValue<float>(user_shell, "screen_height"),
+        .name = GetObjectValue<std::string>(session_shell, "name"),
+        .screen_width = GetObjectValue<float>(session_shell, "screen_width"),
+        .screen_height = GetObjectValue<float>(session_shell, "screen_height"),
         .display_usage = GetObjectValue<fuchsia::ui::policy::DisplayUsage>(
-            user_shell, "display_usage"),
+            session_shell, "display_usage"),
     });
   }
 
@@ -148,7 +149,8 @@
 
 }  // namespace internal
 
-const std::vector<UserShellSettings>& UserShellSettings::GetSystemSettings() {
+const std::vector<SessionShellSettings>&
+SessionShellSettings::GetSystemSettings() {
   // This method is intentionally thread-hostile to keep things simple, and
   // needs modification to be thread-safe or thread-compatible.
 
@@ -156,7 +158,7 @@
     return *g_system_settings;
   }
 
-  g_system_settings = new std::vector<UserShellSettings>;
+  g_system_settings = new std::vector<SessionShellSettings>;
 
   std::string json;
   if (!files::ReadFileToString(kBaseShellConfigJsonPath, &json)) {
@@ -165,11 +167,12 @@
     return *g_system_settings;
   }
 
-  *g_system_settings = internal::ParseUserShellSettings(json);
+  *g_system_settings = internal::ParseSessionShellSettings(json);
   return *g_system_settings;
 }
 
-bool operator==(const UserShellSettings& lhs, const UserShellSettings& rhs) {
+bool operator==(const SessionShellSettings& lhs,
+                const SessionShellSettings& rhs) {
   if (lhs.name != rhs.name)
     return false;
 
diff --git a/lib/session_shell_settings/session_shell_settings.h b/lib/session_shell_settings/session_shell_settings.h
new file mode 100644
index 0000000..2b7fce4
--- /dev/null
+++ b/lib/session_shell_settings/session_shell_settings.h
@@ -0,0 +1,42 @@
+// Copyright 2018 The Fuchsia Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef PERIDOT_LIB_SESSION_SHELL_SETTINGS_SESSION_SHELL_SETTINGS_H_
+#define PERIDOT_LIB_SESSION_SHELL_SETTINGS_SESSION_SHELL_SETTINGS_H_
+
+#include <vector>
+
+#include <fuchsia/ui/policy/cpp/fidl.h>
+
+namespace modular {
+
+// A data structure representing Session Shell Settings. See
+// |kBaseShellConfigJsonPath| in session_shell_settings.cc for the path name and
+// JSON that this is intended to represent.
+struct SessionShellSettings {
+  // Returns the session shell settings for the system. This is guaranteed to be
+  // O(1). This is thread-unsafe; callers can safely call this method if callers
+  // synchronize access.
+  static const std::vector<SessionShellSettings>& GetSystemSettings();
+
+  // The name of the session shell, e.g. "ermine".
+  const std::string name;
+
+  // The screen width & height in millimeters for the session shell's display.
+  // Defaults to a signaling NaN so that any attempts to use it without checking
+  // for NaN will trap.
+  const float screen_width = std::numeric_limits<float>::signaling_NaN();
+  const float screen_height = std::numeric_limits<float>::signaling_NaN();
+
+  // The display usage policy for this session shell.
+  const fuchsia::ui::policy::DisplayUsage display_usage =
+      fuchsia::ui::policy::DisplayUsage::kUnknown;
+};
+
+bool operator==(const SessionShellSettings& lhs,
+                const SessionShellSettings& rhs);
+
+}  // namespace modular
+
+#endif  // PERIDOT_LIB_SESSION_SHELL_SETTINGS_SESSION_SHELL_SETTINGS_H_
diff --git a/lib/user_shell_settings/user_shell_settings_test.cc b/lib/session_shell_settings/session_shell_settings_test.cc
similarity index 70%
rename from lib/user_shell_settings/user_shell_settings_test.cc
rename to lib/session_shell_settings/session_shell_settings_test.cc
index 3ef651c..3c5923f 100644
--- a/lib/user_shell_settings/user_shell_settings_test.cc
+++ b/lib/session_shell_settings/session_shell_settings_test.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "peridot/lib/user_shell_settings/user_shell_settings.h"
+#include "peridot/lib/session_shell_settings/session_shell_settings.h"
 
 #include <cmath>
 
@@ -28,7 +28,7 @@
 GetObjectValue<fuchsia::ui::policy::DisplayUsage>(
     const rapidjson::Value& object, const std::string& field_name);
 
-std::vector<UserShellSettings> ParseUserShellSettings(const std::string& json);
+std::vector<SessionShellSettings> ParseSessionShellSettings(const std::string& json);
 
 }  // namespace internal
 
@@ -36,7 +36,7 @@
 
 using modular::internal::GetObjectValue;
 
-TEST(UserShellSettingsTest,
+TEST(SessionShellSettingsTest,
      GetObjectValue_String_ReturnsEmptyStringOnNonStringType) {
   rapidjson::Document doc;
   std::string s;
@@ -54,7 +54,7 @@
   EXPECT_EQ(s, "");
 }
 
-TEST(UserShellSettingsTest, GetObjectValue_String) {
+TEST(SessionShellSettingsTest, GetObjectValue_String) {
   rapidjson::Document doc;
   doc.Parse("{ \"foo\": \"bar\" }");
 
@@ -62,7 +62,7 @@
   EXPECT_EQ(s, "bar");
 }
 
-TEST(UserShellSettingsTest, GetObjectValue_Float_FailedParse) {
+TEST(SessionShellSettingsTest, GetObjectValue_Float_FailedParse) {
   rapidjson::Document doc;
   doc.Parse("{ \"foo\": \"bar\" }");
 
@@ -70,7 +70,7 @@
   EXPECT_TRUE(std::isnan(f));
 }
 
-TEST(UserShellSettingsTest, GetObjectValue_Float_SuccessfulParse) {
+TEST(SessionShellSettingsTest, GetObjectValue_Float_SuccessfulParse) {
   rapidjson::Document doc;
   doc.Parse("{ \"foo\": \"3.141\" }");
 
@@ -78,7 +78,7 @@
   EXPECT_FLOAT_EQ(f, 3.141f);
 }
 
-TEST(UserShellSettingsTest, GetObjectValue_DisplayUsage_FailedParse) {
+TEST(SessionShellSettingsTest, GetObjectValue_DisplayUsage_FailedParse) {
   using DisplayUsage = fuchsia::ui::policy::DisplayUsage;
 
   rapidjson::Document doc;
@@ -88,7 +88,7 @@
   EXPECT_EQ(e, DisplayUsage::kUnknown);
 }
 
-TEST(UserShellSettingsTest, GetObjectValue_DisplayUsage_SuccessfulParse) {
+TEST(SessionShellSettingsTest, GetObjectValue_DisplayUsage_SuccessfulParse) {
   using DisplayUsage = fuchsia::ui::policy::DisplayUsage;
 
   rapidjson::Document doc;
@@ -98,23 +98,23 @@
   EXPECT_EQ(e, DisplayUsage::kMidrange);
 }
 
-TEST(UserShellSettingsTest, ParseUserShellSettings_ParseError) {
-  EXPECT_EQ(internal::ParseUserShellSettings("a"),
-            std::vector<UserShellSettings>());
-  EXPECT_EQ(internal::ParseUserShellSettings("{}"),
-            std::vector<UserShellSettings>());
+TEST(SessionShellSettingsTest, ParseSessionShellSettings_ParseError) {
+  EXPECT_EQ(internal::ParseSessionShellSettings("a"),
+            std::vector<SessionShellSettings>());
+  EXPECT_EQ(internal::ParseSessionShellSettings("{}"),
+            std::vector<SessionShellSettings>());
 }
 
-TEST(UserShellSettingsTest, ParseUserShellSettings_ParseEmptyList) {
-  EXPECT_EQ(internal::ParseUserShellSettings("[]"),
-            std::vector<UserShellSettings>());
+TEST(SessionShellSettingsTest, ParseSessionShellSettings_ParseEmptyList) {
+  EXPECT_EQ(internal::ParseSessionShellSettings("[]"),
+            std::vector<SessionShellSettings>());
 }
 
-TEST(UserShellSettingsTest, ParseUserShellSettings_ParseNameOnly) {
+TEST(SessionShellSettingsTest, ParseSessionShellSettings_ParseNameOnly) {
   using DisplayUsage = fuchsia::ui::policy::DisplayUsage;
 
   const auto& settings =
-      internal::ParseUserShellSettings(R"( [{ "name": "example_name" }] )")
+      internal::ParseSessionShellSettings(R"( [{ "name": "example_name" }] )")
           .at(0);
 
   EXPECT_EQ(settings.name, "example_name");
@@ -123,10 +123,10 @@
   EXPECT_EQ(settings.display_usage, DisplayUsage::kUnknown);
 }
 
-TEST(UserShellSettingsTest, ParseUserShellSettings_ParseCompleteEntry) {
+TEST(SessionShellSettingsTest, ParseSessionShellSettings_ParseCompleteEntry) {
   using DisplayUsage = fuchsia::ui::policy::DisplayUsage;
 
-  const auto& settings = internal::ParseUserShellSettings(
+  const auto& settings = internal::ParseSessionShellSettings(
                              R"( [{ "name": "example_name",
                                     "screen_width": "3.14",
                                     "screen_height": "2.718",
@@ -139,8 +139,8 @@
   EXPECT_EQ(settings.display_usage, DisplayUsage::kClose);
 }
 
-TEST(UserShellSettingsTest, ParseUserShellSettings_ParseThreeEntries) {
-  const auto& vector = internal::ParseUserShellSettings(
+TEST(SessionShellSettingsTest, ParseSessionShellSettings_ParseThreeEntries) {
+  const auto& vector = internal::ParseSessionShellSettings(
       R"( [{ "name": "example_name1" },
            { "name": "example_name2" },
            { "name": "example_name3" }] )");
diff --git a/lib/testing/component_base.h b/lib/testing/component_base.h
index 4b1dd32..d3ff0b7 100644
--- a/lib/testing/component_base.h
+++ b/lib/testing/component_base.h
@@ -22,7 +22,7 @@
 // and calling TestRunner::Done().
 //
 // Component is fuchsia::modular::Module, fuchsia::modular::Agent,
-// fuchsia::modular::UserShell, etc.
+// fuchsia::modular::SessionShell, etc.
 template <typename Component>
 class ComponentBase : protected SingleServiceApp<Component> {
  public:
diff --git a/lib/user_shell_settings/user_shell_settings.h b/lib/user_shell_settings/user_shell_settings.h
deleted file mode 100644
index e5cec04..0000000
--- a/lib/user_shell_settings/user_shell_settings.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2018 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef PERIDOT_LIB_USER_SHELL_SETTINGS_USER_SHELL_SETTINGS_H_
-#define PERIDOT_LIB_USER_SHELL_SETTINGS_USER_SHELL_SETTINGS_H_
-
-#include <vector>
-
-#include <fuchsia/ui/policy/cpp/fidl.h>
-
-namespace modular {
-
-// A data structure representing User Shell Settings. See
-// |kBaseShellConfigJsonPath| in user_shell_settings.cc for the path name and
-// JSON that this is intended to represent.
-struct UserShellSettings {
-  // Returns the user shell settings for the system. This is guaranteed to be
-  // O(1). This is thread-unsafe; callers can safely call this method if callers
-  // synchronize access.
-  static const std::vector<UserShellSettings>& GetSystemSettings();
-
-  // The name of the user shell, e.g. "ermine".
-  const std::string name;
-
-  // The screen width & height in millimeters for the user shell's display.
-  // Defaults to a signaling NaN so that any attempts to use it without checking
-  // for NaN will trap.
-  const float screen_width = std::numeric_limits<float>::signaling_NaN();
-  const float screen_height = std::numeric_limits<float>::signaling_NaN();
-
-  // The display usage policy for this user shell.
-  const fuchsia::ui::policy::DisplayUsage display_usage =
-      fuchsia::ui::policy::DisplayUsage::kUnknown;
-};
-
-bool operator==(const UserShellSettings& lhs, const UserShellSettings& rhs);
-
-}  // namespace modular
-
-#endif  // PERIDOT_LIB_USER_SHELL_SETTINGS_USER_SHELL_SETTINGS_H_
diff --git a/packages/benchmarks/modular b/packages/benchmarks/modular
index 2434f3f..fd6830b 100644
--- a/packages/benchmarks/modular
+++ b/packages/benchmarks/modular
@@ -6,6 +6,6 @@
     "packages": [
         "//peridot/tests/benchmarks:modular_benchmarks",
         "//peridot/tests/benchmarks/story:modular_benchmark_story_module",
-        "//peridot/tests/benchmarks/story:modular_benchmark_story_user_shell"
+        "//peridot/tests/benchmarks/story:modular_benchmark_story_session_shell"
     ]
 }
diff --git a/packages/prod/integration_testing b/packages/prod/integration_testing
index 89070de..1ca2a33 100644
--- a/packages/prod/integration_testing
+++ b/packages/prod/integration_testing
@@ -8,6 +8,6 @@
         "//peridot/bin/sessionmgr/story_runner:dev_story_shell",
         "//peridot/bin/test_driver:test_driver_module",
         "//peridot/bin/token_manager:dev_token_manager",
-        "//peridot/bin/sessionmgr:dev_user_shell"
+        "//peridot/bin/sessionmgr:dev_session_shell"
     ]
 }
diff --git a/packages/tests/modular_integration_tests b/packages/tests/modular_integration_tests
index e1431fa..8bbb2d6 100644
--- a/packages/tests/modular_integration_tests
+++ b/packages/tests/modular_integration_tests
@@ -6,7 +6,7 @@
     "packages": [
         "//peridot/tests/chain:chain_test_child_module",
         "//peridot/tests/chain:chain_test_module",
-        "//peridot/tests/chain:chain_test_user_shell",
+        "//peridot/tests/chain:chain_test_session_shell",
         "//peridot/tests/clipboard:clipboard_test_module",
         "//peridot/tests/common:common_active_module",
         "//peridot/tests/common:common_module_index",
@@ -20,18 +20,18 @@
         "//peridot/tests/embed_shell:embed_shell_test_story_shell",
         "//peridot/tests/intents:intent_test_parent_module",
         "//peridot/tests/intents:intent_test_child_module",
-        "//peridot/tests/last_focus_time:last_focus_time_test_user_shell",
+        "//peridot/tests/last_focus_time:last_focus_time_test_session_shell",
         "//peridot/tests/link_context_entities:link_context_entities_test_module",
-        "//peridot/tests/link_context_entities:link_context_entities_test_user_shell",
+        "//peridot/tests/link_context_entities:link_context_entities_test_session_shell",
         "//peridot/tests/link_data:link_data_test_module0",
         "//peridot/tests/link_data:link_data_test_module1",
         "//peridot/tests/link_data:link_data_test_module2",
-        "//peridot/tests/link_data:link_data_test_user_shell",
+        "//peridot/tests/link_data:link_data_test_session_shell",
         "//peridot/tests/link_passing:link_passing_test_module1",
         "//peridot/tests/link_passing:link_passing_test_module2",
         "//peridot/tests/link_passing:link_passing_test_module3",
         "//peridot/tests:modular_tests",
-        "//peridot/tests/module_context:module_context_test_user_shell",
+        "//peridot/tests/module_context:module_context_test_session_shell",
         "//peridot/tests/module_context:module_context_test_module",
         "//peridot/tests/parent_child:parent_child_test_child_module1",
         "//peridot/tests/parent_child:parent_child_test_child_module2",
@@ -39,13 +39,13 @@
         "//peridot/tests/queue_persistence:queue_persistence_test_agent",
         "//peridot/tests/queue_persistence:queue_persistence_test_module",
         "//peridot/tests/story_shell:story_shell_test_story_shell",
-        "//peridot/tests/story_shell:story_shell_test_user_shell",
-        "//peridot/tests/story_update:story_update_test_user_shell",
+        "//peridot/tests/story_shell:story_shell_test_session_shell",
+        "//peridot/tests/story_update:story_update_test_session_shell",
         "//peridot/tests/suggestion:suggestion_test_module",
-        "//peridot/tests/suggestion:suggestion_test_user_shell",
+        "//peridot/tests/suggestion:suggestion_test_session_shell",
         "//peridot/tests/trigger:trigger_test_agent",
         "//peridot/tests/trigger:trigger_test_module",
-        "//peridot/tests/trigger:trigger_test_user_shell",
-        "//peridot/tests/user_shell:user_shell_test_user_shell"
+        "//peridot/tests/trigger:trigger_test_session_shell",
+        "//peridot/tests/session_shell:session_shell_test_session_shell"
     ]
 }
diff --git a/public/fidl/fuchsia.modular.internal/sessionmgr.fidl b/public/fidl/fuchsia.modular.internal/sessionmgr.fidl
index 58c4935..0a731f0 100644
--- a/public/fidl/fuchsia.modular.internal/sessionmgr.fidl
+++ b/public/fidl/fuchsia.modular.internal/sessionmgr.fidl
@@ -20,7 +20,7 @@
     // specific TokenManager handles for ledger and agent_runner.
     // TODO(alhaad): Fold paramters into |UserContext|.
     1: Initialize(fuchsia.modular.auth.Account? account,
-                  fuchsia.modular.AppConfig user_shell,
+                  fuchsia.modular.AppConfig session_shell,
                   fuchsia.modular.AppConfig story_shell,
                   fuchsia.modular.auth.TokenProviderFactory? token_provider_factory,
                   fuchsia.auth.TokenManager? ledger_token_manager,
@@ -28,12 +28,15 @@
                   UserContext user_context,
                   request<fuchsia.ui.viewsv1token.ViewOwner>? view_owner);
 
+    // DEPRECATED: Use SwapSessionShell instead.
     2: SwapUserShell(fuchsia.modular.AppConfig user_shell) -> ();
+
+    3: SwapSessionShell(fuchsia.modular.AppConfig session_shell) -> ();
 };
 
 // This interface is provided by basemgr to |Sessionmgr|.
 interface UserContext {
-    // See detailed comments in UserShellContext.Logout().
+    // See detailed comments in SessionShellContext.Logout().
     1: Logout();
 
     2: GetPresentation(request<fuchsia.ui.policy.Presentation> presentation);
diff --git a/public/fidl/fuchsia.modular.internal/story_data.fidl b/public/fidl/fuchsia.modular.internal/story_data.fidl
index a277337..b429de2 100644
--- a/public/fidl/fuchsia.modular.internal/story_data.fidl
+++ b/public/fidl/fuchsia.modular.internal/story_data.fidl
@@ -8,7 +8,7 @@
 using fuchsia.modular;
 
 struct StoryData {
-    // Metadata available to the UserShell.
+    // Metadata available to the SessionShell.
     fuchsia.modular.StoryInfo story_info;
 
     // An optiona client-supplied name for this story.
diff --git a/public/fidl/fuchsia.modular/BUILD.gn b/public/fidl/fuchsia.modular/BUILD.gn
index 21925ca..7108fdb 100644
--- a/public/fidl/fuchsia.modular/BUILD.gn
+++ b/public/fidl/fuchsia.modular/BUILD.gn
@@ -42,6 +42,9 @@
     "module/module_manifest.fidl",
     "module/module_state.fidl",
     "module_resolver/module_resolver.fidl",
+    "session/device_map.fidl",
+    "session/focus.fidl",
+    "session/session_shell.fidl",
     "story/create_link.fidl",
     "story/create_module_parameter_map.fidl",
     "story/link.fidl",
@@ -64,8 +67,6 @@
     "suggestion/user_input.fidl",
     "surface/container.fidl",
     "surface/surface.fidl",
-    "user/device_map.fidl",
-    "user/focus.fidl",
     "user/user_shell.fidl",
     "user_intelligence/intelligence_services.fidl",
     "user_intelligence/scope.fidl",
diff --git a/public/fidl/fuchsia.modular/agent/agent_provider.fidl b/public/fidl/fuchsia.modular/agent/agent_provider.fidl
index dea8146..03d17c3 100644
--- a/public/fidl/fuchsia.modular/agent/agent_provider.fidl
+++ b/public/fidl/fuchsia.modular/agent/agent_provider.fidl
@@ -5,7 +5,7 @@
 library fuchsia.modular;
 
 // Sessionmgr creates an instance of this service and passes it to the
-// UserShell so it can observe Agents for the user.
+// SessionShell so it can observe Agents for the user.
 //
 // TODO(alhaad): Add interfaces for modifying Agents for the user.
 interface AgentProvider {
diff --git a/public/fidl/fuchsia.modular/basemgr/user_provider.fidl b/public/fidl/fuchsia.modular/basemgr/user_provider.fidl
index f29c903..6511f13 100644
--- a/public/fidl/fuchsia.modular/basemgr/user_provider.fidl
+++ b/public/fidl/fuchsia.modular/basemgr/user_provider.fidl
@@ -49,18 +49,23 @@
     // can be NULL which means logging-in in an incognito mode.
     string? account_id;
 
-    // |view_owner| is the view given to the |UserShell| started for the newly
+    // |view_owner| is the view given to the |SessionShell| started for the newly
     // logged-in user.
     request<fuchsia.ui.viewsv1token.ViewOwner> view_owner;
 
     // Services provided by the |BaseShell| that can be offered to the
-    // |UserShell| that is being logged into.
+    // |SessionShell| that is being logged into.
     fuchsia.sys.ServiceProvider? services;
 
     // If login fails, |user_controller| is closed.
     request<UserController> user_controller;
 
-    // Configuration of the user shell to run. It can be NULL which means that
+    // Configuration of the session shell to run. It can be NULL which means that
+    // this configuration is picked up from command-line arguments to basemgr.
+    AppConfig? session_shell_config;
+
+    // DEPRECATED: Use session_shell_config instead.
+    // Configuration of the session shell to run. It can be NULL which means that
     // this configuration is picked up from command-line arguments to basemgr.
     AppConfig? user_shell_config;
 };
@@ -96,10 +101,16 @@
     // Registers a watcher for the user's life cycle events.
     2: Watch(UserWatcher watcher);
 
+    // DEPRECATED: Use SwapSessionShell.
     // Stops the currently running user shell and starts the one specified by
     // |user_shell_config|. This operation stops all stories before starting the
     // new shell.
     3: SwapUserShell(AppConfig user_shell_config) -> ();
+
+    // 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.
+    4: SwapSessionShell(AppConfig session_shell_config) -> ();
 };
 
 // Implemented by a |BaseShell| implementation in order to receive
diff --git a/public/fidl/fuchsia.modular/module/module_context.fidl b/public/fidl/fuchsia.modular/module/module_context.fidl
index 304132b..cf161be 100644
--- a/public/fidl/fuchsia.modular/module/module_context.fidl
+++ b/public/fidl/fuchsia.modular/module/module_context.fidl
@@ -74,13 +74,13 @@
     9: GetStoryId() -> (string story_id);
 
     /// Requests that the current story and module gain focus. It's up to the story
-    /// shell and user shell to honor that request.
+    /// shell and session shell to honor that request.
     10: RequestFocus();
 
     /// DEPRECATED in favor of using StartOngoingActivity().
     ///
     /// Declares that activity is ongoing in this module. This information is
-    /// forwarded to the user shell (cf. StoryProvider.WatchActivity()
+    /// forwarded to the session shell (cf. StoryProvider.WatchActivity()
     /// and StoryProviderWatcher), which may use it and the frequency at which it
     /// receives these calls to determine to keep the story of this module in
     /// focus. The module should call this method regularly while activity is
@@ -94,8 +94,8 @@
     16: RemoveSelfFromStory();
 
     /// Requests to update the visibility state of the current story within the
-    /// user shell. The framework will decide whether to honor this request, then
-    /// forward it to the user shell.
+    /// session shell. The framework will decide whether to honor this request, then
+    /// forward it to the session shell.
     ///
     /// Modules should not have any knowledge of the story's visibility state, nor
     /// should it ever operate with any assumption of the visibility state.
@@ -108,11 +108,11 @@
     13: RequestStoryVisibilityState(StoryVisibilityState visibility_state);
 
     /// Declares that activity of the given [type] is ongoing in this module.
-    /// This information is forwarded to the user shell
+    /// This information is forwarded to the session shell
     /// (cf. StoryProvider.WatchActivity() and StoryActivityWatcher).
     ///
     /// Modules should close [request] when the ongoing activity has stopped, and
-    /// this will also signal to the user shell that the ongoing activity has
+    /// this will also signal to the session shell that the ongoing activity has
     /// stopped. For now, pausing media should count as a stopped ongoing activity,
     /// and when it is resumed it should be started as a new ongoing activity.
     /// Conversely, media playing in a continuous playlist (i.e playing the next
diff --git a/public/fidl/fuchsia.modular/module/module_data.fidl b/public/fidl/fuchsia.modular/module/module_data.fidl
index 09641c7..03d0a0f 100644
--- a/public/fidl/fuchsia.modular/module/module_data.fidl
+++ b/public/fidl/fuchsia.modular/module/module_data.fidl
@@ -55,7 +55,7 @@
     /// ModuleContext.StartModule() and ModuleContext.EmbedModule().
     INTERNAL = 0;
 
-    /// Module that was started from outside the story by Maxwell / UserShell via
+    /// Module that was started from outside the story by Maxwell / SessionShell via
     /// StoryController.AddModule() or StoryProvider.CreateStory() as first
     /// module.
     EXTERNAL = 1;
diff --git a/public/fidl/fuchsia.modular/user/device_map.fidl b/public/fidl/fuchsia.modular/session/device_map.fidl
similarity index 100%
rename from public/fidl/fuchsia.modular/user/device_map.fidl
rename to public/fidl/fuchsia.modular/session/device_map.fidl
diff --git a/public/fidl/fuchsia.modular/user/focus.fidl b/public/fidl/fuchsia.modular/session/focus.fidl
similarity index 86%
rename from public/fidl/fuchsia.modular/user/focus.fidl
rename to public/fidl/fuchsia.modular/session/focus.fidl
index 25fa49f..872c7f5 100644
--- a/public/fidl/fuchsia.modular/user/focus.fidl
+++ b/public/fidl/fuchsia.modular/session/focus.fidl
@@ -8,7 +8,7 @@
 // that is currently in focus and (2) stories that are visible to the
 // user. Names of interfaces follow the usual patterns:
 //
-// {Focus,VisibleStories}Controller is used by user shell to update
+// {Focus,VisibleStories}Controller is used by session shell to update
 // information whenever changes take place.
 //
 // {Focus,VisibleStories}Provider is used by maxwell and usershell to
@@ -19,21 +19,21 @@
 // sessionmgr to stop / pause stories that are not visible to the
 // user.
 
-// Implemented by sessionmgr. Given to user shell through its namespace.
+// Implemented by sessionmgr. Given to session shell through its namespace.
 interface FocusController {
     // Sets the focus on this device.
     1: Set(string? focused_story_id);
     2: WatchRequest(FocusRequestWatcher watcher);
 };
 
-// Implemented by user shell. OnFocusRequest() gets called whenever there
+// Implemented by session shell. OnFocusRequest() gets called whenever there
 // is a new request to change focus on this device. Requests can be
 // made via FocusProvider.Request().
 interface FocusRequestWatcher {
     1: OnFocusRequest(string story_id);
 };
 
-// Implemented by sessionmgr. Given to user shell and session agents through
+// Implemented by sessionmgr. Given to session shell and session agents through
 // their namespace. Focus is persisted on the ledger.
 [Discoverable]
 interface FocusProvider {
@@ -43,7 +43,7 @@
     // Watches for change in focus on any of the user's devices.
     2: Watch(FocusWatcher watcher);
 
-    // Requests user shell to change focus on this device. If user shell
+    // Requests session shell to change focus on this device. If session shell
     // responds to this request, focus shall be taken away from
     // previously focused story and an update will be sent on
     // FocusWatcher.OnFocusChange(). If |story_id| is NULL, the timeline
@@ -73,7 +73,7 @@
     uint64 last_focus_change_timestamp;
 };
 
-// Implemented by sessionmgr. Given to user shell through its namespace.
+// Implemented by sessionmgr. Given to session shell through its namespace.
 interface VisibleStoriesController {
     1: Set(vector<string>? visible_story_ids);
 };
diff --git a/public/fidl/fuchsia.modular/session/session_shell.fidl b/public/fidl/fuchsia.modular/session/session_shell.fidl
new file mode 100644
index 0000000..2b94d41
--- /dev/null
+++ b/public/fidl/fuchsia.modular/session/session_shell.fidl
@@ -0,0 +1,53 @@
+// Copyright 2016 The Fuchsia Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+library fuchsia.modular;
+
+using fuchsia.modular.auth;
+using fuchsia.speech;
+using fuchsia.ui.policy;
+
+// This interface allows a |SessionShell| to request capabilities from its
+// creator in a way that is more explicit about the services that are
+// offered than a generic |ServiceProvider|.
+[Discoverable]
+interface SessionShellContext {
+    // The account associated with the currently logged-in user. It's NULL if
+    // logged into GUEST mode.
+    1: GetAccount() -> (fuchsia.modular.auth.Account? account);
+    2: GetAgentProvider(request<AgentProvider> request);
+    3: GetComponentContext(request<ComponentContext> request);
+    4: GetDeviceName() -> (string device_name);
+    5: GetFocusController(request<FocusController> request);
+    6: GetFocusProvider(request<FocusProvider> request);
+    7: GetIntelligenceServices(request<IntelligenceServices> request);
+    8: GetLink(request<Link> request);
+    9: GetPresentation(request<fuchsia.ui.policy.Presentation> request);
+    10: GetSpeechToText(request<fuchsia.speech.SpeechToText> request);
+    11: GetStoryProvider(request<StoryProvider> request);
+    12: GetSuggestionProvider(request<SuggestionProvider> request);
+    13: GetVisibleStoriesController(request<VisibleStoriesController> request);
+
+    // Requests logout of the user. This causes the basemgr to tear down the
+    // |Sessionmgr| instance of the user.
+    16: Logout();
+};
+
+// Session shell provides this service to the framework which may plumb it to
+// different subscribers, such as story shell and intelligence provider.
+//
+// EXPERIMENTAL Service that allows consumers of a given story to get a
+// connection to a Presentation, and visual state services provided by the user
+// shell. This allows story shell implementations to coordinate event and focus
+// handling. An analog mechanism exists between BaseShell and SessionShell.
+[Discoverable] // Created by session shell components.
+interface SessionShellPresentationProvider {
+    // When a StoryShell calls StoryShellContext.GetPresentation(), this request
+    // arrives here.
+    1: GetPresentation(string story_id, request<fuchsia.ui.policy.Presentation> request);
+
+    // When a StoryShell calls StoryShellContext.WatchVisualState(), this request
+    // arrives here.
+    2: WatchVisualState(string story_id, StoryVisualStateWatcher watcher);
+};
diff --git a/public/fidl/fuchsia.modular/story/story_command.fidl b/public/fidl/fuchsia.modular/story/story_command.fidl
index 6a61a3d..3ae351e 100644
--- a/public/fidl/fuchsia.modular/story/story_command.fidl
+++ b/public/fidl/fuchsia.modular/story/story_command.fidl
@@ -78,7 +78,7 @@
     fuchsia.mem.Buffer? value;
 };
 
-// Instructs the user shell to focus the mod under |mod_name|.
+// Instructs the session shell to focus the mod under |mod_name|.
 struct FocusMod {
     vector<string> mod_name;
 };
diff --git a/public/fidl/fuchsia.modular/story/story_controller.fidl b/public/fidl/fuchsia.modular/story/story_controller.fidl
index 09d5d47..9492818 100644
--- a/public/fidl/fuchsia.modular/story/story_controller.fidl
+++ b/public/fidl/fuchsia.modular/story/story_controller.fidl
@@ -6,7 +6,7 @@
 
 using fuchsia.ui.viewsv1token;
 
-// Used by the clients of StoryProvider (UserShell) to interact with a single
+// Used by the clients of StoryProvider (SessionShell) to interact with a single
 // story. Created by StoryProvider.
 //
 // If |StoryController| is closed, the |StoryState| associated with this story
diff --git a/public/fidl/fuchsia.modular/story/story_info.fidl b/public/fidl/fuchsia.modular/story/story_info.fidl
index a56ec27..519a589 100644
--- a/public/fidl/fuchsia.modular/story/story_info.fidl
+++ b/public/fidl/fuchsia.modular/story/story_info.fidl
@@ -4,7 +4,7 @@
 
 library fuchsia.modular;
 
-// Information about a story as provided to the UserShell.
+// Information about a story as provided to the SessionShell.
 struct StoryInfo {
     // URL of the first module run in this story. This module is free to
     // run more modules in the story. Used for display purposes only.
@@ -21,7 +21,7 @@
     // A value of zero means the story has never been focused.
     int64 last_focus_time;
 
-    // Data the UserShell wants to keep associated with this Story, like
+    // Data the SessionShell wants to keep associated with this Story, like
     // title, a color, or a display rank.
     vector<StoryInfoExtraEntry>? extra;
 };
diff --git a/public/fidl/fuchsia.modular/story/story_provider.fidl b/public/fidl/fuchsia.modular/story/story_provider.fidl
index 99f7665..899e35a 100644
--- a/public/fidl/fuchsia.modular/story/story_provider.fidl
+++ b/public/fidl/fuchsia.modular/story/story_provider.fidl
@@ -4,7 +4,7 @@
 
 library fuchsia.modular;
 
-// Sessionmgr passes a connection to this service to the UserShell so it can
+// Sessionmgr passes a connection to this service to the SessionShell so it can
 // operate on stories for the user. It is also passed to other services that
 // monitor or manipulate stories, specifically the maxwell services.
 //
diff --git a/public/fidl/fuchsia.modular/story/story_shell.fidl b/public/fidl/fuchsia.modular/story/story_shell.fidl
index ebcb127..33dc65b 100644
--- a/public/fidl/fuchsia.modular/story/story_shell.fidl
+++ b/public/fidl/fuchsia.modular/story/story_shell.fidl
@@ -15,7 +15,7 @@
 // The ViewOwner request is sent to the separate ViewProvider service. This way,
 // the story shell may be implemented as a flutter component.
 //
-// Teardown may be initiated by the user shell calling StoryController.Stop(),
+// Teardown may be initiated by the session shell calling StoryController.Stop(),
 // by the sessionmgr being terminated, or by the system shutting down.
 [Discoverable] // Created by story shell applications.
 interface StoryShell {
@@ -77,8 +77,8 @@
 // know or be able to do about the Story. Not much right now, but we expect this
 // to increase.
 interface StoryShellContext {
-    // Requests a Presentation connection from the UserShell. See
-    // UserShellPresenationProvider in user_shell.fidl.
+    // Requests a Presentation connection from the SessionShell. See
+    // SessionShellPresenationProvider in session_shell.fidl.
     1: GetPresentation(request<fuchsia.ui.policy.Presentation> request);
 
     // Starts watching Story shell's visual state.
diff --git a/public/fidl/fuchsia.modular/story/story_visibility_state.fidl b/public/fidl/fuchsia.modular/story/story_visibility_state.fidl
index e8d5ff5..bce4570 100644
--- a/public/fidl/fuchsia.modular/story/story_visibility_state.fidl
+++ b/public/fidl/fuchsia.modular/story/story_visibility_state.fidl
@@ -4,8 +4,8 @@
 
 library fuchsia.modular;
 
-// Visibility state of a Story within the user shell.
-// This state describes how a story should be displayed within the user shell,
+// Visibility state of a Story within the session shell.
+// This state describes how a story should be displayed within the session shell,
 // regardless of whether the story is in focus or not. Focus state and
 // visibility state are orthogonal concepts.
 // E.g A story can be out-of-focus and be in IMMERSIVE state at the same time
diff --git a/public/fidl/fuchsia.modular/suggestion/suggestion_provider.fidl b/public/fidl/fuchsia.modular/suggestion/suggestion_provider.fidl
index bd703d4..19ccfa5 100644
--- a/public/fidl/fuchsia.modular/suggestion/suggestion_provider.fidl
+++ b/public/fidl/fuchsia.modular/suggestion/suggestion_provider.fidl
@@ -106,7 +106,7 @@
     // TODO(miguelfrde): define for regular suggestions.
     SNOOZED = 2;
 
-    // Set when a suggestion is hidden by the user shell with no user interaction.
+    // Set when a suggestion is hidden by the session shell with no user interaction.
     // An interruption that is expired is placed in the next space.
     // This has no effect on regular suggestions, only on interruptions.
     EXPIRED = 3;
@@ -127,7 +127,7 @@
     // only suggestion shown to the user.
     float32 confidence;
 
-    // Story id for a rich suggestion. User shell may opt to start and compose the
+    // Story id for a rich suggestion. Session shell may opt to start and compose the
     // story's UI as the suggestion display, instead of making use of the properties
     // in |display|.
     string? preloaded_story_id;
diff --git a/public/fidl/fuchsia.modular/user/user_shell.fidl b/public/fidl/fuchsia.modular/user/user_shell.fidl
index de13189..b393fd9 100644
--- a/public/fidl/fuchsia.modular/user/user_shell.fidl
+++ b/public/fidl/fuchsia.modular/user/user_shell.fidl
@@ -8,6 +8,8 @@
 using fuchsia.speech;
 using fuchsia.ui.policy;
 
+// DEPRECATED: Use session/session_shell.fidl instead.
+//
 // This interface allows a |UserShell| to request capabilities from its
 // creator in a way that is more explicit about the services that are
 // offered than a generic |ServiceProvider|.
diff --git a/tests/BUILD.gn b/tests/BUILD.gn
index 2189523..612964d 100644
--- a/tests/BUILD.gn
+++ b/tests/BUILD.gn
@@ -29,7 +29,7 @@
 #
 #    - _module -- Module
 #    - _agent -- Agent
-#    - _user_shell -- UserShell
+#    - _session_shell -- SessionShell
 #    - _base_shell -- BaseShell
 #    - _story_shell -- StoryShell
 #    - _service -- FIDL interfaces
@@ -39,7 +39,7 @@
 #
 # HOW TO ADD A NEW INTEGRATION TEST
 #
-# 1. Add a new subdirectory with rules for the test components (user shells,
+# 1. Add a new subdirectory with rules for the test components (session shells,
 #    modules, agents). Define all test components as executable_package()s.
 #
 # 2. Add the newly defined packages for all test components to
diff --git a/tests/benchmarks/BUILD.gn b/tests/benchmarks/BUILD.gn
index 866a06e..2ee3049 100644
--- a/tests/benchmarks/BUILD.gn
+++ b/tests/benchmarks/BUILD.gn
@@ -24,7 +24,7 @@
 #
 # HOW TO ADD A NEW BENCHMARK
 #
-# 1. Add a new subdirectory with rules for the test components (user shells,
+# 1. Add a new subdirectory with rules for the test components (session shells,
 #    modules, agents). Define all test components as executable_package()s.
 #
 # 2. Add the newly defined packages for all test components to
diff --git a/tests/benchmarks/story/BUILD.gn b/tests/benchmarks/story/BUILD.gn
index 94ca5fc..acc5dcd 100644
--- a/tests/benchmarks/story/BUILD.gn
+++ b/tests/benchmarks/story/BUILD.gn
@@ -19,7 +19,7 @@
   ]
 }
 
-executable_package("modular_benchmark_story_user_shell") {
+executable_package("modular_benchmark_story_session_shell") {
   testonly = true
 
   deps = [
@@ -37,7 +37,7 @@
   ]
 
   sources = [
-    "modular_benchmark_story_user_shell.cc",
+    "modular_benchmark_story_session_shell.cc",
   ]
 }
 
diff --git a/tests/benchmarks/story/modular_benchmark_story.tspec b/tests/benchmarks/story/modular_benchmark_story.tspec
index a28e61c..7fba428 100644
--- a/tests/benchmarks/story/modular_benchmark_story.tspec
+++ b/tests/benchmarks/story/modular_benchmark_story.tspec
@@ -3,8 +3,8 @@
   "app": "basemgr",
   "args": ["--account_provider=dev_token_manager",
            "--base_shell=dev_base_shell",
-           "--user_shell=modular_benchmark_story_user_shell",
-           "--user_shell_args=--story_count=20",
+           "--session_shell=modular_benchmark_story_session_shell",
+           "--session_shell_args=--story_count=20",
            "--story_shell=dev_story_shell"],
   "categories": ["benchmark", "modular"],
   "duration": 120,
diff --git a/tests/benchmarks/story/modular_benchmark_story_module.cc b/tests/benchmarks/story/modular_benchmark_story_module.cc
index e516753..038c6e0 100644
--- a/tests/benchmarks/story/modular_benchmark_story_module.cc
+++ b/tests/benchmarks/story/modular_benchmark_story_module.cc
@@ -65,7 +65,7 @@
     // Corresponding TRACE_ASYNC_END() is in Notify().
     TRACE_ASYNC_BEGIN("benchmark", "link/set", count_);
 
-    // Corresponding TRACE_FLOW_END() is in the user shell.
+    // Corresponding TRACE_FLOW_END() is in the session shell.
     TRACE_FLOW_BEGIN("benchmark", "link/trans", count_);
 
     fsl::SizedVmo vmo;
diff --git a/tests/benchmarks/story/modular_benchmark_story_user_shell.cc b/tests/benchmarks/story/modular_benchmark_story_session_shell.cc
similarity index 94%
rename from tests/benchmarks/story/modular_benchmark_story_user_shell.cc
rename to tests/benchmarks/story/modular_benchmark_story_session_shell.cc
index bc1f895..fd04695 100644
--- a/tests/benchmarks/story/modular_benchmark_story_user_shell.cc
+++ b/tests/benchmarks/story/modular_benchmark_story_session_shell.cc
@@ -132,18 +132,17 @@
   FXL_DISALLOW_COPY_AND_ASSIGN(LinkWatcherImpl);
 };
 
-// Measures timing the machinery available to a user shell implementation. This
-// is invoked as a user shell from basemgr and executes a predefined
+// Measures timing the machinery available to a session shell implementation.
+// This is invoked as a session shell from basemgr and executes a predefined
 // sequence of steps, rather than to expose a UI to be driven by user
-// interaction, as a user shell normally would.
+// interaction, as a session shell normally would.
 class TestApp : public modular::ViewApp {
  public:
   TestApp(component::StartupContext* const startup_context, Settings settings)
       : ViewApp(startup_context), settings_(std::move(settings)) {
-    user_shell_context_ =
-        startup_context
-            ->ConnectToEnvironmentService<fuchsia::modular::UserShellContext>();
-    user_shell_context_->GetStoryProvider(story_provider_.NewRequest());
+    session_shell_context_ = startup_context->ConnectToEnvironmentService<
+        fuchsia::modular::SessionShellContext>();
+    session_shell_context_->GetStoryProvider(story_provider_.NewRequest());
     puppet_master_ =
         startup_context
             ->ConnectToEnvironmentService<fuchsia::modular::PuppetMaster>();
@@ -171,7 +170,7 @@
 
     } else {
       TRACE_ASYNC_BEGIN("benchmark", "user/logout", 0);
-      user_shell_context_->Logout();
+      session_shell_context_->Logout();
     }
   }
 
@@ -289,7 +288,7 @@
   fuchsia::modular::PuppetMasterPtr puppet_master_;
   fuchsia::modular::StoryPuppetMasterPtr story_puppet_master_;
 
-  fuchsia::modular::UserShellContextPtr user_shell_context_;
+  fuchsia::modular::SessionShellContextPtr session_shell_context_;
   fuchsia::modular::StoryProviderPtr story_provider_;
   fuchsia::modular::StoryControllerPtr story_controller_;
   fuchsia::modular::LinkPtr link_;
diff --git a/tests/chain/BUILD.gn b/tests/chain/BUILD.gn
index 352d703..7ea2a36 100644
--- a/tests/chain/BUILD.gn
+++ b/tests/chain/BUILD.gn
@@ -4,11 +4,11 @@
 
 import("//peridot/build/executable_package.gni")
 
-executable_package("chain_test_user_shell") {
+executable_package("chain_test_session_shell") {
   testonly = true
 
   sources = [
-    "chain_test_user_shell.cc",
+    "chain_test_session_shell.cc",
   ]
 
   deps = [
diff --git a/tests/chain/chain_test_user_shell.cc b/tests/chain/chain_test_session_shell.cc
similarity index 92%
rename from tests/chain/chain_test_user_shell.cc
rename to tests/chain/chain_test_session_shell.cc
index 5bf48a3..fd2d325 100644
--- a/tests/chain/chain_test_user_shell.cc
+++ b/tests/chain/chain_test_session_shell.cc
@@ -38,10 +38,9 @@
       : ComponentBase(startup_context) {
     TestInit(__FILE__);
 
-    user_shell_context_ =
-        startup_context
-            ->ConnectToEnvironmentService<fuchsia::modular::UserShellContext>();
-    user_shell_context_->GetStoryProvider(story_provider_.NewRequest());
+    session_shell_context_ = startup_context->ConnectToEnvironmentService<
+        fuchsia::modular::SessionShellContext>();
+    session_shell_context_->GetStoryProvider(story_provider_.NewRequest());
 
     puppet_master_ =
         startup_context
@@ -93,7 +92,7 @@
     story_controller_->Start(story_view_binding.NewRequest());
   }
 
-  fuchsia::modular::UserShellContextPtr user_shell_context_;
+  fuchsia::modular::SessionShellContextPtr session_shell_context_;
   fuchsia::modular::PuppetMasterPtr puppet_master_;
   fuchsia::modular::StoryPuppetMasterPtr story_puppet_master_;
   fuchsia::modular::StoryProviderPtr story_provider_;
diff --git a/tests/last_focus_time/BUILD.gn b/tests/last_focus_time/BUILD.gn
index 4225f6f..1383040 100644
--- a/tests/last_focus_time/BUILD.gn
+++ b/tests/last_focus_time/BUILD.gn
@@ -12,11 +12,11 @@
   ]
 }
 
-executable_package("last_focus_time_test_user_shell") {
+executable_package("last_focus_time_test_session_shell") {
   testonly = true
 
   sources = [
-    "last_focus_time_test_user_shell.cc",
+    "last_focus_time_test_session_shell.cc",
   ]
 
   deps = [
diff --git a/tests/last_focus_time/last_focus_time_test_user_shell.cc b/tests/last_focus_time/last_focus_time_test_session_shell.cc
similarity index 93%
rename from tests/last_focus_time/last_focus_time_test_user_shell.cc
rename to tests/last_focus_time/last_focus_time_test_session_shell.cc
index 31bac42..49fb7b7 100644
--- a/tests/last_focus_time/last_focus_time_test_user_shell.cc
+++ b/tests/last_focus_time/last_focus_time_test_session_shell.cc
@@ -156,14 +156,13 @@
     puppet_master_ =
         startup_context
             ->ConnectToEnvironmentService<fuchsia::modular::PuppetMaster>();
-    user_shell_context_ =
-        startup_context
-            ->ConnectToEnvironmentService<fuchsia::modular::UserShellContext>();
-    user_shell_context_->GetStoryProvider(story_provider_.NewRequest());
+    session_shell_context_ = startup_context->ConnectToEnvironmentService<
+        fuchsia::modular::SessionShellContext>();
+    session_shell_context_->GetStoryProvider(story_provider_.NewRequest());
     story_provider_watcher_.Watch(&story_provider_);
 
-    user_shell_context_->GetFocusController(focus_controller_.NewRequest());
-    user_shell_context_->GetFocusProvider(focus_provider_.NewRequest());
+    session_shell_context_->GetFocusController(focus_controller_.NewRequest());
+    session_shell_context_->GetFocusProvider(focus_provider_.NewRequest());
     focus_watcher_.Watch(focus_provider_.get());
 
     CreateStory();
@@ -225,9 +224,9 @@
     });
   }
 
-  void Logout() { user_shell_context_->Logout(); }
+  void Logout() { session_shell_context_->Logout(); }
 
-  fuchsia::modular::UserShellContextPtr user_shell_context_;
+  fuchsia::modular::SessionShellContextPtr session_shell_context_;
 
   fuchsia::modular::PuppetMasterPtr puppet_master_;
   fuchsia::modular::StoryPuppetMasterPtr story_puppet_master_;
diff --git a/tests/link_context_entities/BUILD.gn b/tests/link_context_entities/BUILD.gn
index 26ae4af..ff9bee5 100644
--- a/tests/link_context_entities/BUILD.gn
+++ b/tests/link_context_entities/BUILD.gn
@@ -12,11 +12,11 @@
   ]
 }
 
-executable_package("link_context_entities_test_user_shell") {
+executable_package("link_context_entities_test_session_shell") {
   testonly = true
 
   sources = [
-    "link_context_entities_test_user_shell.cc",
+    "link_context_entities_test_session_shell.cc",
   ]
 
   deps = [
diff --git a/tests/link_context_entities/link_context_entities_test_user_shell.cc b/tests/link_context_entities/link_context_entities_test_session_shell.cc
similarity index 94%
rename from tests/link_context_entities/link_context_entities_test_user_shell.cc
rename to tests/link_context_entities/link_context_entities_test_session_shell.cc
index e3ba4c1..36d8ea7 100644
--- a/tests/link_context_entities/link_context_entities_test_user_shell.cc
+++ b/tests/link_context_entities/link_context_entities_test_session_shell.cc
@@ -90,13 +90,12 @@
     puppet_master_ =
         startup_context
             ->ConnectToEnvironmentService<fuchsia::modular::PuppetMaster>();
-    user_shell_context_ =
-        startup_context
-            ->ConnectToEnvironmentService<fuchsia::modular::UserShellContext>();
-    user_shell_context_->GetStoryProvider(story_provider_.NewRequest());
+    session_shell_context_ = startup_context->ConnectToEnvironmentService<
+        fuchsia::modular::SessionShellContext>();
+    session_shell_context_->GetStoryProvider(story_provider_.NewRequest());
 
     fuchsia::modular::IntelligenceServicesPtr intelligence_services;
-    user_shell_context_->GetIntelligenceServices(
+    session_shell_context_->GetIntelligenceServices(
         intelligence_services.NewRequest());
     intelligence_services->GetContextReader(context_reader_.NewRequest());
     context_listener_.Listen(context_reader_.get());
@@ -224,9 +223,9 @@
     }
   }
 
-  void Logout() { user_shell_context_->Logout(); }
+  void Logout() { session_shell_context_->Logout(); }
 
-  fuchsia::modular::UserShellContextPtr user_shell_context_;
+  fuchsia::modular::SessionShellContextPtr session_shell_context_;
   fuchsia::modular::StoryProviderPtr story_provider_;
 
   fuchsia::modular::PuppetMasterPtr puppet_master_;
diff --git a/tests/link_data/BUILD.gn b/tests/link_data/BUILD.gn
index 5f386a8..37f6ba0 100644
--- a/tests/link_data/BUILD.gn
+++ b/tests/link_data/BUILD.gn
@@ -12,11 +12,11 @@
   ]
 }
 
-executable_package("link_data_test_user_shell") {
+executable_package("link_data_test_session_shell") {
   testonly = true
 
   sources = [
-    "link_data_test_user_shell.cc",
+    "link_data_test_session_shell.cc",
   ]
 
   deps = [
diff --git a/tests/link_data/README.md b/tests/link_data/README.md
index a18d572..51f75d3 100644
--- a/tests/link_data/README.md
+++ b/tests/link_data/README.md
@@ -3,11 +3,11 @@
 Tests the machinery that allows modules to coordinate through shared link data,
 and that these link data are persisted across story stop and resume.
 
-This test is invoked as a user shell from basemgr and executes a
+This test is invoked as a session shell from basemgr and executes a
 predefined sequence of steps, rather than to expose a UI to be driven by user
-interaction, as a user shell normally would.
+interaction, as a session shell normally would.
 
-The user shell creates a story with Module0. Module0 in turn starts Module1 and
+The session shell creates a story with Module0. Module0 in turn starts Module1 and
 Module2 and sets them up such that they can exchage data. Module1 and Module2
 alternate in incrementing a counter.
 
diff --git a/tests/link_data/link_data_test_module0.cc b/tests/link_data/link_data_test_module0.cc
index f4df327..6caf9bd 100644
--- a/tests/link_data/link_data_test_module0.cc
+++ b/tests/link_data/link_data_test_module0.cc
@@ -61,9 +61,9 @@
 
   void Start() {
     // Read kModule0Link link data, and send its value back to the test user
-    // shell to verify its expected value. Nb. the user shell does this only for
-    // the first invocation. Therefore, it would be wrong to verify this with a
-    // TestPoint.
+    // shell to verify its expected value. Nb. the session shell does this only
+    // for the first invocation. Therefore, it would be wrong to verify this
+    // with a TestPoint.
     module_context_->GetLink(kModule0Link, link_.NewRequest());
     link_->Get(nullptr, [this](std::unique_ptr<fuchsia::mem::Buffer> content) {
       std::string content_string;
diff --git a/tests/link_data/link_data_test_user_shell.cc b/tests/link_data/link_data_test_session_shell.cc
similarity index 96%
rename from tests/link_data/link_data_test_user_shell.cc
rename to tests/link_data/link_data_test_session_shell.cc
index fb4be54..7774af9 100644
--- a/tests/link_data/link_data_test_user_shell.cc
+++ b/tests/link_data/link_data_test_session_shell.cc
@@ -43,9 +43,9 @@
         startup_context
             ->ConnectToEnvironmentService<fuchsia::modular::PuppetMaster>();
     startup_context
-        ->ConnectToEnvironmentService<fuchsia::modular::UserShellContext>(
-            user_shell_context_.NewRequest());
-    user_shell_context_->GetStoryProvider(story_provider_.NewRequest());
+        ->ConnectToEnvironmentService<fuchsia::modular::SessionShellContext>(
+            session_shell_context_.NewRequest());
+    session_shell_context_->GetStoryProvider(story_provider_.NewRequest());
 
     TestStory1();
   }
@@ -240,13 +240,13 @@
   void TestStory2_Delete() {
     story_provider_->DeleteStory(story_info_.id, [this] {
       story2_stop_.Pass();
-      user_shell_context_->Logout();
+      session_shell_context_->Logout();
     });
   }
 
   fuchsia::modular::PuppetMasterPtr puppet_master_;
   fuchsia::modular::StoryPuppetMasterPtr story_puppet_master_;
-  fuchsia::modular::UserShellContextPtr user_shell_context_;
+  fuchsia::modular::SessionShellContextPtr session_shell_context_;
   fuchsia::modular::StoryProviderPtr story_provider_;
   fuchsia::modular::StoryControllerPtr story_controller_;
   fuchsia::modular::LinkPtr module0_link_;
diff --git a/tests/modular_tests.json b/tests/modular_tests.json
index e165fda..0834088 100644
--- a/tests/modular_tests.json
+++ b/tests/modular_tests.json
@@ -2,72 +2,72 @@
   "tests": [
     {
       "name": "chain",
-      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --user_shell=chain_test_user_shell --story_shell=dev_story_shell"
+      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --session_shell=chain_test_session_shell --story_shell=dev_story_shell"
     },
     {
       "name": "clipboard",
-      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --user_shell=dev_user_shell --user_shell_args=--root_module=clipboard_test_module --story_shell=dev_story_shell"
+      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --session_shell=dev_session_shell --session_shell_args=--root_module=clipboard_test_module --story_shell=dev_story_shell"
     },
     {
       "name": "component_context",
-      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --user_shell=dev_user_shell --story_shell=dev_story_shell --user_shell_args=--root_module=component_context_test_module"
+      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --session_shell=dev_session_shell --story_shell=dev_story_shell --session_shell_args=--root_module=component_context_test_module"
     },
     {
       "name": "embed_shell",
-      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --user_shell=dev_user_shell --story_shell=embed_shell_test_story_shell --user_shell_args=--root_module=embed_shell_test_parent_module"
+      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --session_shell=dev_session_shell --story_shell=embed_shell_test_story_shell --session_shell_args=--root_module=embed_shell_test_parent_module"
     },
     {
       "name": "last_focus_time",
-      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --user_shell=last_focus_time_test_user_shell --story_shell=dev_story_shell"
+      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --session_shell=last_focus_time_test_session_shell --story_shell=dev_story_shell"
     },
     {
       "name": "link_context_entities",
-      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --user_shell=link_context_entities_test_user_shell --story_shell=dev_story_shell"
+      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --session_shell=link_context_entities_test_session_shell --story_shell=dev_story_shell"
     },
     {
       "name": "link_data",
-      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --user_shell=link_data_test_user_shell --story_shell=dev_story_shell",
+      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --session_shell=link_data_test_session_shell --story_shell=dev_story_shell",
       "disabled": true
     },
     {
       "name": "link_passing",
-      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --user_shell=dev_user_shell --story_shell=dev_story_shell --user_shell_args=--root_module=link_passing_test_module1"
+      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --session_shell=dev_session_shell --story_shell=dev_story_shell --session_shell_args=--root_module=link_passing_test_module1"
     },
     {
       "name": "parent_child",
-      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --user_shell=dev_user_shell --story_shell=dev_story_shell --user_shell_args=--root_module=parent_child_test_parent_module"
+      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --session_shell=dev_session_shell --story_shell=dev_story_shell --session_shell_args=--root_module=parent_child_test_parent_module"
     },
     {
       "name": "queue_persistence",
-      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --user_shell=dev_user_shell --user_shell_args=--root_module=queue_persistence_test_module --story_shell=dev_story_shell"
+      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --session_shell=dev_session_shell --session_shell_args=--root_module=queue_persistence_test_module --story_shell=dev_story_shell"
     },
     {
       "name": "story_shell",
-      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --user_shell=story_shell_test_user_shell --story_shell=story_shell_test_story_shell"
+      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --session_shell=story_shell_test_session_shell --story_shell=story_shell_test_story_shell"
     },
     {
       "name": "story_update",
-      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --user_shell=story_update_test_user_shell --story_shell=dev_story_shell"
+      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --session_shell=story_update_test_session_shell --story_shell=dev_story_shell"
     },
     {
       "name": "suggestion",
-      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --user_shell=suggestion_test_user_shell --story_shell=dev_story_shell"
+      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --session_shell=suggestion_test_session_shell --story_shell=dev_story_shell"
     },
     {
       "name": "trigger",
-      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --user_shell=trigger_test_user_shell --story_shell=dev_story_shell"
+      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --session_shell=trigger_test_session_shell --story_shell=dev_story_shell"
     },
     {
       "name": "module_context",
-      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --user_shell=module_context_test_user_shell --story_shell=dev_story_shell"
+      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --session_shell=module_context_test_session_shell --story_shell=dev_story_shell"
     },
     {
-      "name": "user_shell",
-      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --user_shell=user_shell_test_user_shell --story_shell=dev_story_shell"
+      "name": "session_shell",
+      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --session_shell=session_shell_test_session_shell --story_shell=dev_story_shell"
     },
     {
       "name": "intents",
-      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --user_shell=dev_user_shell --story_shell=dev_story_shell --user_shell_args=--root_module=intent_test_parent_module",
+      "exec": "basemgr --test --account_provider=dev_token_manager --base_shell=dev_base_shell --session_shell=dev_session_shell --story_shell=dev_story_shell --session_shell_args=--root_module=intent_test_parent_module",
       "disabled": true
     }
   ]
diff --git a/tests/module_context/BUILD.gn b/tests/module_context/BUILD.gn
index 50fa554..0fff7ee 100644
--- a/tests/module_context/BUILD.gn
+++ b/tests/module_context/BUILD.gn
@@ -4,11 +4,11 @@
 
 import("//peridot/build/executable_package.gni")
 
-executable_package("module_context_test_user_shell") {
+executable_package("module_context_test_session_shell") {
   testonly = true
 
   sources = [
-    "module_context_test_user_shell.cc",
+    "module_context_test_session_shell.cc",
   ]
 
   deps = [
diff --git a/tests/module_context/README.md b/tests/module_context/README.md
index b2f28a5..7909dd5 100644
--- a/tests/module_context/README.md
+++ b/tests/module_context/README.md
@@ -2,9 +2,9 @@
 
 Tests that calls to ModuleContext.RemoveSelfFromStory() are handled correctly by the framework.
 
-The user shell starts a story and adds two modules to it. It then signals the
+The session shell starts a story and adds two modules to it. It then signals the
 first module to call ModuleContext.RemoveSelfFromStory and verifies that the module is stopped.
-The user shell then signals the second module, and verifies that the story is
+The session shell then signals the second module, and verifies that the story is
 stopped as well.
 
 
diff --git a/tests/module_context/module_context_test_user_shell.cc b/tests/module_context/module_context_test_session_shell.cc
similarity index 96%
rename from tests/module_context/module_context_test_user_shell.cc
rename to tests/module_context/module_context_test_session_shell.cc
index d7ad543..ddce915 100644
--- a/tests/module_context/module_context_test_user_shell.cc
+++ b/tests/module_context/module_context_test_session_shell.cc
@@ -76,17 +76,16 @@
     puppet_master_ =
         startup_context
             ->ConnectToEnvironmentService<fuchsia::modular::PuppetMaster>();
-    user_shell_context_ =
-        startup_context
-            ->ConnectToEnvironmentService<fuchsia::modular::UserShellContext>();
+    session_shell_context_ = startup_context->ConnectToEnvironmentService<
+        fuchsia::modular::SessionShellContext>();
 
-    user_shell_context_->GetStoryProvider(story_provider_.NewRequest());
+    session_shell_context_->GetStoryProvider(story_provider_.NewRequest());
 
     CreateStory();
     async::PostDelayedTask(
         async_get_default_dispatcher(),
         callback::MakeScoped(weak_ptr_factory_.GetWeakPtr(),
-                             [this] { user_shell_context_->Logout(); }),
+                             [this] { session_shell_context_->Logout(); }),
         zx::msec(modular::testing::kTestTimeoutMilliseconds));
   }
 
@@ -283,7 +282,7 @@
               if (!is_running) {
                 story_stopped_.Pass();
               }
-              user_shell_context_->Logout();
+              session_shell_context_->Logout();
             });
           });
     });
@@ -331,7 +330,7 @@
 
   fuchsia::modular::PuppetMasterPtr puppet_master_;
   fuchsia::modular::StoryPuppetMasterPtr story_puppet_master_;
-  fuchsia::modular::UserShellContextPtr user_shell_context_;
+  fuchsia::modular::SessionShellContextPtr session_shell_context_;
   fuchsia::modular::StoryProviderPtr story_provider_;
   fuchsia::modular::StoryControllerPtr story_controller_;
   StoryActivityWatcherImpl story_activity_watcher_;
diff --git a/tests/user_shell/BUILD.gn b/tests/session_shell/BUILD.gn
similarity index 88%
rename from tests/user_shell/BUILD.gn
rename to tests/session_shell/BUILD.gn
index 0232572f..65b4602 100644
--- a/tests/user_shell/BUILD.gn
+++ b/tests/session_shell/BUILD.gn
@@ -12,11 +12,11 @@
   ]
 }
 
-executable_package("user_shell_test_user_shell") {
+executable_package("session_shell_test_session_shell") {
   testonly = true
 
   sources = [
-    "user_shell_test_user_shell.cc",
+    "session_shell_test_session_shell.cc",
   ]
 
   deps = [
diff --git a/tests/session_shell/README.md b/tests/session_shell/README.md
new file mode 100644
index 0000000..a75495e
--- /dev/null
+++ b/tests/session_shell/README.md
@@ -0,0 +1,16 @@
+# session_shell integration test
+
+This test exercises the APIs exposed to the session shell:
+
+* Create, start, stop, delete stories.
+
+* See existing stories as long as they are not deleted.
+
+* Add modules to existign stories.
+
+* Be notified when story state changes.
+
+The test code is invoked as a session shell from basemgr and executes a
+predefined sequence of steps, rather than to expose a UI to be driven by user
+interaction, as a session shell normally would. I.e. the test is implemented as a
+session shell component.
diff --git a/tests/user_shell/defs.h b/tests/session_shell/defs.h
similarity index 63%
rename from tests/user_shell/defs.h
rename to tests/session_shell/defs.h
index 1291d46..a314bcb 100644
--- a/tests/user_shell/defs.h
+++ b/tests/session_shell/defs.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef PERIDOT_TESTS_USER_SHELL_DEFS_H_
-#define PERIDOT_TESTS_USER_SHELL_DEFS_H_
+#ifndef PERIDOT_TESTS_SESSION_SHELL_DEFS_H_
+#define PERIDOT_TESTS_SESSION_SHELL_DEFS_H_
 
 namespace {
 
@@ -11,4 +11,4 @@
 
 }  // namespace
 
-#endif  // PERIDOT_TESTS_USER_SHELL_DEFS_H_
+#endif  // PERIDOT_TESTS_SESSION_SHELL_DEFS_H_
diff --git a/tests/user_shell/user_shell_test_user_shell.cc b/tests/session_shell/session_shell_test_session_shell.cc
similarity index 95%
rename from tests/user_shell/user_shell_test_user_shell.cc
rename to tests/session_shell/session_shell_test_session_shell.cc
index d504ac9..7da246f 100644
--- a/tests/user_shell/user_shell_test_user_shell.cc
+++ b/tests/session_shell/session_shell_test_session_shell.cc
@@ -25,7 +25,7 @@
 #include "peridot/public/lib/integration_testing/cpp/reporting.h"
 #include "peridot/public/lib/integration_testing/cpp/testing.h"
 #include "peridot/tests/common/defs.h"
-#include "peridot/tests/user_shell/defs.h"
+#include "peridot/tests/session_shell/defs.h"
 
 using modular::testing::Await;
 using modular::testing::Signal;
@@ -132,14 +132,13 @@
       : ComponentBase(startup_context) {
     TestInit(__FILE__);
 
-    user_shell_context_ =
-        startup_context
-            ->ConnectToEnvironmentService<fuchsia::modular::UserShellContext>();
+    session_shell_context_ = startup_context->ConnectToEnvironmentService<
+        fuchsia::modular::SessionShellContext>();
     puppet_master_ =
         startup_context
             ->ConnectToEnvironmentService<fuchsia::modular::PuppetMaster>();
 
-    user_shell_context_->GetStoryProvider(story_provider_.NewRequest());
+    session_shell_context_->GetStoryProvider(story_provider_.NewRequest());
     story_provider_state_watcher_.Watch(&story_provider_);
 
     TestStoryProvider_GetStoryInfo_Null();
@@ -168,15 +167,15 @@
             get_story_info_null_.Pass();
           }
 
-          TestUserShellContext_GetLink();
+          TestSessionShellContext_GetLink();
         });
   }
 
-  TestPoint get_link_{"UserShellContext.GetLink()"};
+  TestPoint get_link_{"SessionShellContext.GetLink()"};
 
-  void TestUserShellContext_GetLink() {
-    user_shell_context_->GetLink(user_shell_link_.NewRequest());
-    user_shell_link_->Get(nullptr,
+  void TestSessionShellContext_GetLink() {
+    session_shell_context_->GetLink(session_shell_link_.NewRequest());
+    session_shell_link_->Get(nullptr,
                           [this](std::unique_ptr<fuchsia::mem::Buffer> value) {
                             get_link_.Pass();
                             TestStoryProvider_GetStories();
@@ -488,12 +487,12 @@
 
   StoryProviderStateWatcherImpl story_provider_state_watcher_;
 
-  fuchsia::modular::UserShellContextPtr user_shell_context_;
+  fuchsia::modular::SessionShellContextPtr session_shell_context_;
   fuchsia::modular::StoryProviderPtr story_provider_;
   fuchsia::modular::PuppetMasterPtr puppet_master_;
   fuchsia::modular::StoryPuppetMasterPtr story_puppet_master_;
   fuchsia::modular::StoryControllerPtr story_controller_;
-  fuchsia::modular::LinkPtr user_shell_link_;
+  fuchsia::modular::LinkPtr session_shell_link_;
   fuchsia::modular::StoryInfo story_info_;
 
   FXL_DISALLOW_COPY_AND_ASSIGN(TestApp);
diff --git a/tests/story_shell/BUILD.gn b/tests/story_shell/BUILD.gn
index 67b1c54..501ca7a 100644
--- a/tests/story_shell/BUILD.gn
+++ b/tests/story_shell/BUILD.gn
@@ -40,11 +40,11 @@
   ]
 }
 
-executable_package("story_shell_test_user_shell") {
+executable_package("story_shell_test_session_shell") {
   testonly = true
 
   sources = [
-    "story_shell_test_user_shell.cc",
+    "story_shell_test_session_shell.cc",
   ]
 
   deps = [
diff --git a/tests/story_shell/README.md b/tests/story_shell/README.md
index df62ba5..7465558 100644
--- a/tests/story_shell/README.md
+++ b/tests/story_shell/README.md
@@ -1,7 +1,7 @@
 # story_shell test
 
 This test executes the story shell. Below is the sequence of actions and
-verifications. All actions and verifications are driven by the user shell. The
+verifications. All actions and verifications are driven by the session shell. The
 story shell just responds.
 
 * Create a story and start it.
@@ -24,5 +24,5 @@
 the modules.
 
 For each event we would like to verify, the story shell writes to TestStore
-using Put(). The user shell uses Get() to register handlers for the keys it
+using Put(). The session shell uses Get() to register handlers for the keys it
 expects the story shell to Put(), and continues when it has seen all the keys.
diff --git a/tests/story_shell/story_shell_test_user_shell.cc b/tests/story_shell/story_shell_test_session_shell.cc
similarity index 92%
rename from tests/story_shell/story_shell_test_user_shell.cc
rename to tests/story_shell/story_shell_test_session_shell.cc
index 203d5eb..2a2ba2e 100644
--- a/tests/story_shell/story_shell_test_user_shell.cc
+++ b/tests/story_shell/story_shell_test_session_shell.cc
@@ -40,7 +40,7 @@
 
 // Cf. README.md for what this test does and how.
 class TestApp : public modular::testing::ComponentBase<void>,
-                fuchsia::modular::UserShellPresentationProvider {
+                fuchsia::modular::SessionShellPresentationProvider {
  public:
   explicit TestApp(component::StartupContext* const startup_context)
       : ComponentBase(startup_context) {
@@ -49,15 +49,14 @@
     puppet_master_ =
         startup_context
             ->ConnectToEnvironmentService<fuchsia::modular::PuppetMaster>();
-    user_shell_context_ =
-        startup_context
-            ->ConnectToEnvironmentService<fuchsia::modular::UserShellContext>();
-    user_shell_context_->GetStoryProvider(story_provider_.NewRequest());
+    session_shell_context_ = startup_context->ConnectToEnvironmentService<
+        fuchsia::modular::SessionShellContext>();
+    session_shell_context_->GetStoryProvider(story_provider_.NewRequest());
 
     startup_context->outgoing()
-        .AddPublicService<fuchsia::modular::UserShellPresentationProvider>(
+        .AddPublicService<fuchsia::modular::SessionShellPresentationProvider>(
             [this](fidl::InterfaceRequest<
-                   fuchsia::modular::UserShellPresentationProvider>
+                   fuchsia::modular::SessionShellPresentationProvider>
                        request) {
               presentation_provider_bindings_.AddBinding(this,
                                                          std::move(request));
@@ -75,7 +74,7 @@
   TestPoint story2_presentation_request_{"Story2 Presentation request"};
   bool story2_presentation_request_received_{};
 
-  // |fuchsia::modular::UserShellPresentationProvider|
+  // |fuchsia::modular::SessionShellPresentationProvider|
   void GetPresentation(fidl::StringPtr story_id,
                        fidl::InterfaceRequest<fuchsia::ui::policy::Presentation>
                            request) override {
@@ -92,7 +91,7 @@
     MaybeLogout();
   }
 
-  // |fuchsia::modular::UserShellPresentationProvider|
+  // |fuchsia::modular::SessionShellPresentationProvider|
   void WatchVisualState(
       fidl::StringPtr story_id,
       fidl::InterfaceHandle<fuchsia::modular::StoryVisualStateWatcher> watcher)
@@ -283,16 +282,16 @@
   void MaybeLogout() {
     if (story1_presentation_request_received_ &&
         story2_presentation_request_received_ && end_of_story2_) {
-      user_shell_context_->Logout();
+      session_shell_context_->Logout();
     }
   }
 
   fuchsia::modular::PuppetMasterPtr puppet_master_;
   fuchsia::modular::StoryPuppetMasterPtr story_puppet_master_;
-  fuchsia::modular::UserShellContextPtr user_shell_context_;
+  fuchsia::modular::SessionShellContextPtr session_shell_context_;
   fuchsia::modular::StoryProviderPtr story_provider_;
   fuchsia::modular::StoryControllerPtr story_controller_;
-  fidl::BindingSet<fuchsia::modular::UserShellPresentationProvider>
+  fidl::BindingSet<fuchsia::modular::SessionShellPresentationProvider>
       presentation_provider_bindings_;
 
   FXL_DISALLOW_COPY_AND_ASSIGN(TestApp);
diff --git a/tests/story_update/BUILD.gn b/tests/story_update/BUILD.gn
index 552d9f5..fb5ec61 100644
--- a/tests/story_update/BUILD.gn
+++ b/tests/story_update/BUILD.gn
@@ -12,11 +12,11 @@
   ]
 }
 
-executable_package("story_update_test_user_shell") {
+executable_package("story_update_test_session_shell") {
   testonly = true
 
   sources = [
-    "story_update_test_user_shell.cc",
+    "story_update_test_session_shell.cc",
   ]
 
   deps = [
diff --git a/tests/story_update/story_update_test_user_shell.cc b/tests/story_update/story_update_test_session_shell.cc
similarity index 95%
rename from tests/story_update/story_update_test_user_shell.cc
rename to tests/story_update/story_update_test_session_shell.cc
index efb8293..5d87c70 100644
--- a/tests/story_update/story_update_test_user_shell.cc
+++ b/tests/story_update/story_update_test_session_shell.cc
@@ -35,10 +35,9 @@
     puppet_master_ =
         startup_context
             ->ConnectToEnvironmentService<fuchsia::modular::PuppetMaster>();
-    user_shell_context_ =
-        startup_context
-            ->ConnectToEnvironmentService<fuchsia::modular::UserShellContext>();
-    user_shell_context_->GetStoryProvider(story_provider_.NewRequest());
+    session_shell_context_ = startup_context->ConnectToEnvironmentService<
+        fuchsia::modular::SessionShellContext>();
+    session_shell_context_->GetStoryProvider(story_provider_.NewRequest());
 
     CreateStory();
   }
@@ -213,11 +212,11 @@
         });
   }
 
-  void Logout() { user_shell_context_->Logout(); }
+  void Logout() { session_shell_context_->Logout(); }
 
   fuchsia::modular::PuppetMasterPtr puppet_master_;
   fuchsia::modular::StoryPuppetMasterPtr story_puppet_master_;
-  fuchsia::modular::UserShellContextPtr user_shell_context_;
+  fuchsia::modular::SessionShellContextPtr session_shell_context_;
   fuchsia::modular::StoryProviderPtr story_provider_;
   fuchsia::modular::StoryControllerPtr story_controller_;
   fuchsia::modular::StoryInfoPtr story_info_;
diff --git a/tests/suggestion/BUILD.gn b/tests/suggestion/BUILD.gn
index 3110f7c..900fa06 100644
--- a/tests/suggestion/BUILD.gn
+++ b/tests/suggestion/BUILD.gn
@@ -31,11 +31,11 @@
   ]
 }
 
-executable_package("suggestion_test_user_shell") {
+executable_package("suggestion_test_session_shell") {
   testonly = true
 
   sources = [
-    "suggestion_test_user_shell.cc",
+    "suggestion_test_session_shell.cc",
   ]
 
   deps = [
diff --git a/tests/suggestion/suggestion_test_user_shell.cc b/tests/suggestion/suggestion_test_session_shell.cc
similarity index 90%
rename from tests/suggestion/suggestion_test_user_shell.cc
rename to tests/suggestion/suggestion_test_session_shell.cc
index 443f8d8..973bf30 100644
--- a/tests/suggestion/suggestion_test_user_shell.cc
+++ b/tests/suggestion/suggestion_test_session_shell.cc
@@ -35,12 +35,11 @@
     puppet_master_ =
         startup_context
             ->ConnectToEnvironmentService<fuchsia::modular::PuppetMaster>();
-    user_shell_context_ =
-        startup_context
-            ->ConnectToEnvironmentService<fuchsia::modular::UserShellContext>();
+    session_shell_context_ = startup_context->ConnectToEnvironmentService<
+        fuchsia::modular::SessionShellContext>();
 
-    user_shell_context_->GetStoryProvider(story_provider_.NewRequest());
-    user_shell_context_->GetSuggestionProvider(
+    session_shell_context_->GetStoryProvider(story_provider_.NewRequest());
+    session_shell_context_->GetSuggestionProvider(
         suggestion_provider_.NewRequest());
 
     suggestion_provider_->SubscribeToNext(
@@ -87,7 +86,8 @@
     story_controller_->Start(view_owner_.NewRequest());
   }
 
-  TestPoint received_suggestion_{"SuggestionTestUserShell received suggestion"};
+  TestPoint received_suggestion_{
+      "SuggestionTestSessionShell received suggestion"};
 
   // |fuchsia::modular::NextListener|
   void OnNextResults(
@@ -113,7 +113,7 @@
   fuchsia::modular::PuppetMasterPtr puppet_master_;
   fuchsia::modular::StoryPuppetMasterPtr story_puppet_master_;
   fuchsia::ui::viewsv1token::ViewOwnerPtr view_owner_;
-  fuchsia::modular::UserShellContextPtr user_shell_context_;
+  fuchsia::modular::SessionShellContextPtr session_shell_context_;
   fuchsia::modular::StoryProviderPtr story_provider_;
   fuchsia::modular::StoryControllerPtr story_controller_;
   fuchsia::modular::SuggestionProviderPtr suggestion_provider_;
diff --git a/tests/trigger/BUILD.gn b/tests/trigger/BUILD.gn
index c095d25..a1db925 100644
--- a/tests/trigger/BUILD.gn
+++ b/tests/trigger/BUILD.gn
@@ -13,11 +13,11 @@
   ]
 }
 
-executable_package("trigger_test_user_shell") {
+executable_package("trigger_test_session_shell") {
   testonly = true
 
   sources = [
-    "trigger_test_user_shell.cc",
+    "trigger_test_session_shell.cc",
   ]
 
   deps = [
diff --git a/tests/trigger/README.md b/tests/trigger/README.md
index 75bf47d..62ad5b3 100644
--- a/tests/trigger/README.md
+++ b/tests/trigger/README.md
@@ -5,14 +5,14 @@
   2. An explicitly deleted message queue.
   3. A message queue being deleted as part of story tear down.
 
-The general structure of the test is a user shell is created, which
+The general structure of the test is a session shell is created, which
 in turn creates a story and adds the test module to it.
 
 The test module then verifies (1) and (2) by interacting with the
 test agent. It also creates a message queue that it does not delete
-explicitly and hands the token to the user shell.
+explicitly and hands the token to the session shell.
 
-Once (1) and (2) have been verified, the user shell deletes the story
+Once (1) and (2) have been verified, the session shell deletes the story
 and waits for the token it was handed by the module to appear in the
 test store. This signals that the agent was woken by the deletion trigger
 for that queue.
diff --git a/tests/trigger/trigger_test_module.cc b/tests/trigger/trigger_test_module.cc
index 5211bd0..02e0d21 100644
--- a/tests/trigger/trigger_test_module.cc
+++ b/tests/trigger/trigger_test_module.cc
@@ -48,7 +48,7 @@
     component_context_->ObtainMessageQueue("explicit_test",
                                            explicit_msg_queue_.NewRequest());
     // The message queue that is used to verify deletion triggers from deletes
-    // when the module's namespace is torn down. The test user shell will
+    // when the module's namespace is torn down. The test session shell will
     // verify that the agent is notified of this queues deletion.
     component_context_->ObtainMessageQueue("implicit_test",
                                            implicit_msg_queue_.NewRequest());
diff --git a/tests/trigger/trigger_test_user_shell.cc b/tests/trigger/trigger_test_session_shell.cc
similarity index 91%
rename from tests/trigger/trigger_test_user_shell.cc
rename to tests/trigger/trigger_test_session_shell.cc
index 3fab544..5badd7e 100644
--- a/tests/trigger/trigger_test_user_shell.cc
+++ b/tests/trigger/trigger_test_session_shell.cc
@@ -35,10 +35,9 @@
     puppet_master_ =
         startup_context
             ->ConnectToEnvironmentService<fuchsia::modular::PuppetMaster>();
-    user_shell_context_ =
-        startup_context
-            ->ConnectToEnvironmentService<fuchsia::modular::UserShellContext>();
-    user_shell_context_->GetStoryProvider(story_provider_.NewRequest());
+    session_shell_context_ = startup_context->ConnectToEnvironmentService<
+        fuchsia::modular::SessionShellContext>();
+    session_shell_context_->GetStoryProvider(story_provider_.NewRequest());
 
     CreateStory();
   }
@@ -72,7 +71,7 @@
     async::PostDelayedTask(
         async_get_default_dispatcher(),
         callback::MakeScoped(weak_ptr_factory_.GetWeakPtr(),
-                             [this] { user_shell_context_->Logout(); }),
+                             [this] { session_shell_context_->Logout(); }),
         zx::msec(kTimeoutMilliseconds));
   }
 
@@ -108,7 +107,7 @@
               // test store.
               Await(value, [this] {
                 agent_executed_delete_task_.Pass();
-                user_shell_context_->Logout();
+                session_shell_context_->Logout();
               });
             });
           });
@@ -117,7 +116,7 @@
 
   fuchsia::modular::PuppetMasterPtr puppet_master_;
   fuchsia::modular::StoryPuppetMasterPtr story_puppet_master_;
-  fuchsia::modular::UserShellContextPtr user_shell_context_;
+  fuchsia::modular::SessionShellContextPtr session_shell_context_;
   fuchsia::modular::StoryProviderPtr story_provider_;
   fuchsia::modular::StoryControllerPtr story_controller_;
 
diff --git a/tests/user_shell/README.md b/tests/user_shell/README.md
deleted file mode 100644
index 8e5f84c..0000000
--- a/tests/user_shell/README.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# user_shell integration test
-
-This test exercises the APIs exposed to the user shell:
-
-* Create, start, stop, delete stories.
-
-* See existing stories as long as they are not deleted.
-
-* Add modules to existign stories.
-
-* Be notified when story state changes.
-
-The test code is invoked as a user shell from basemgr and executes a
-predefined sequence of steps, rather than to expose a UI to be driven by user
-interaction, as a user shell normally would. I.e. the test is implemented as a
-user shell component.