diff --git a/bin/sessionmgr/dev_session_shell.cc b/bin/sessionmgr/dev_session_shell.cc
index 4f84771..80b1c38 100644
--- a/bin/sessionmgr/dev_session_shell.cc
+++ b/bin/sessionmgr/dev_session_shell.cc
@@ -56,6 +56,7 @@
 class DevSessionShellApp : fuchsia::modular::StoryWatcher,
                            fuchsia::modular::InterruptionListener,
                            fuchsia::modular::NextListener,
+                           fuchsia::modular::SessionShell,
                            public modular::ViewApp {
  public:
   explicit DevSessionShellApp(component::StartupContext* const startup_context,
@@ -63,11 +64,9 @@
       : ViewApp(startup_context),
         settings_(std::move(settings)),
         story_watcher_binding_(this) {
-    puppet_master_ =
-        startup_context
-            ->ConnectToEnvironmentService<fuchsia::modular::PuppetMaster>();
-    session_shell_context_ = startup_context->ConnectToEnvironmentService<
-        fuchsia::modular::SessionShellContext>();
+    startup_context->ConnectToEnvironmentService(puppet_master_.NewRequest());
+    startup_context->ConnectToEnvironmentService(
+        session_shell_context_.NewRequest());
     session_shell_context_->GetStoryProvider(story_provider_.NewRequest());
     session_shell_context_->GetSuggestionProvider(
         suggestion_provider_.NewRequest());
@@ -79,6 +78,9 @@
         interruption_listener_bindings_.AddBinding(this));
     suggestion_provider_->SubscribeToNext(
         next_listener_bindings_.AddBinding(this), 3);
+
+    startup_context->outgoing().AddPublicService(
+        session_shell_bindings_.GetHandler(this));
   }
 
   ~DevSessionShellApp() override = default;
@@ -182,10 +184,8 @@
     story_controller_->Watch(story_watcher_binding_.NewBinding());
 
     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());
-    view_->ConnectView(std::move(root_module_view));
+
+    story_controller_->RequestStart();
     focus_controller_->Set(story_id);
     auto visible_stories = fidl::VectorPtr<fidl::StringPtr>::New(0);
     visible_stories.push_back(story_id);
@@ -205,6 +205,21 @@
     }
   }
 
+  // |SessionShell|
+  void AttachView(fuchsia::modular::ViewIdentifier view_id,
+                  fidl::InterfaceHandle<fuchsia::ui::viewsv1token::ViewOwner>
+                  view_owner) override {
+    FXL_LOG(INFO) << "DevSessionShell AttachView(): " << view_id.story_id;
+    view_->ConnectView(std::move(view_owner));
+  }
+
+  // |SessionShell|
+  void DetachView(fuchsia::modular::ViewIdentifier view_id,
+                  std::function<void()> done) override {
+    FXL_LOG(INFO) << "DevSessionShell DetachView(): " << view_id.story_id;
+    done();
+  }
+
   // |fuchsia::modular::StoryWatcher|
   void OnStateChange(fuchsia::modular::StoryState state) override {
     FXL_LOG(INFO) << "DevSessionShell State " << fidl::ToUnderlying(state);
@@ -244,6 +259,8 @@
 
   const Settings settings_;
 
+  fidl::BindingSet<fuchsia::modular::SessionShell> session_shell_bindings_;
+
   zx::eventpair view_token_;
   std::unique_ptr<modular::ViewHost> view_;
 
diff --git a/bin/sessionmgr/story_runner/story_controller_impl.cc b/bin/sessionmgr/story_runner/story_controller_impl.cc
index 5f16a0c..de21e60 100644
--- a/bin/sessionmgr/story_runner/story_controller_impl.cc
+++ b/bin/sessionmgr/story_runner/story_controller_impl.cc
@@ -1003,12 +1003,10 @@
  public:
   StartCall(
       StoryControllerImpl* const story_controller_impl,
-      StoryStorage* const storage,
-      fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner> request)
+      StoryStorage* const storage)
       : Operation("StoryControllerImpl::StartCall", [] {}),
         story_controller_impl_(story_controller_impl),
-        storage_(storage),
-        request_(std::move(request)) {}
+        storage_(storage) {}
 
  private:
   void Run() override {
@@ -1021,7 +1019,7 @@
       return;
     }
 
-    story_controller_impl_->StartStoryShell(std::move(request_));
+    story_controller_impl_->StartStoryShell();
 
     // Start all modules that were not themselves explicitly started by another
     // module.
@@ -1046,7 +1044,6 @@
 
   StoryControllerImpl* const story_controller_impl_;  // not owned
   StoryStorage* const storage_;                       // not owned
-  fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner> request_;
 
   OperationQueue operation_queue_;
 
@@ -1459,14 +1456,8 @@
   }));
 }
 
-void StoryControllerImpl::Start(
-    fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner> request) {
-  operation_queue_.Add(new StartCall(this, story_storage_, std::move(request)));
-}
-
 void StoryControllerImpl::RequestStart() {
-  operation_queue_.Add(
-      new StartCall(this, story_storage_, nullptr /* ViewOwner request */));
+  operation_queue_.Add(new StartCall(this, story_storage_));
 }
 
 void StoryControllerImpl::Stop(StopCallback done) {
@@ -1560,15 +1551,10 @@
   ConnectLinkPath(fidl::MakeOptional(std::move(link_path)), std::move(request));
 }
 
-void StoryControllerImpl::StartStoryShell(
-    fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner> request) {
-  if (!request) {
-    // The start call originated in RequestStart() rather than Start().
-    fuchsia::ui::viewsv1token::ViewOwnerPtr view_owner;
-    request = view_owner.NewRequest();
-    story_provider_impl_->AttachView(story_id_, std::move(view_owner));
-    needs_detach_view_ = true;
-  }
+void StoryControllerImpl::StartStoryShell() {
+  fuchsia::ui::viewsv1token::ViewOwnerPtr view_owner;
+  auto request = view_owner.NewRequest();
+  story_provider_impl_->AttachView(story_id_, std::move(view_owner));
 
   story_shell_app_ =
       story_provider_impl_->StartStoryShell(story_id_, std::move(request));
@@ -1581,12 +1567,7 @@
 }
 
 void StoryControllerImpl::DetachView(std::function<void()> done) {
-  if (needs_detach_view_) {
-    story_provider_impl_->DetachView(story_id_, std::move(done));
-    needs_detach_view_ = false;
-  } else {
-    done();
-  }
+  story_provider_impl_->DetachView(story_id_, std::move(done));
 }
 
 void StoryControllerImpl::SetRuntimeState(
diff --git a/bin/sessionmgr/story_runner/story_controller_impl.h b/bin/sessionmgr/story_runner/story_controller_impl.h
index 3f6972c..6684813 100644
--- a/bin/sessionmgr/story_runner/story_controller_impl.h
+++ b/bin/sessionmgr/story_runner/story_controller_impl.h
@@ -165,11 +165,7 @@
  private:
   // |StoryController|
   void Stop(StopCallback done) override;
-
-  // |StoryController|
   void GetInfo(GetInfoCallback callback) override;
-  void Start(fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>
-                 request) override;
   void RequestStart() override;
   void TakeAndLoadSnapshot(
       fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner> request,
@@ -189,8 +185,7 @@
                fidl::InterfaceRequest<fuchsia::modular::Link> request) override;
 
   // Communicates with SessionShell.
-  void StartStoryShell(
-      fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner> request);
+  void StartStoryShell();
   void DetachView(std::function<void()> done);
 
   // Called whenever |story_storage_| sees an updated ModuleData from another
@@ -227,13 +222,7 @@
   // reading from the |story_observer_| directly.
   const fidl::StringPtr story_id_;
 
-  // True once AttachView() was called. Temporarily needed during transition
-  // from Start() to RequestStart(), will be removed once Start() is removed.
-  // Cf. MF-121.
-  bool needs_detach_view_{};
-
   StoryProviderImpl* const story_provider_impl_;  // Not owned.
-
   SessionStorage* const session_storage_;  // Not owned.
   StoryStorage* const story_storage_;      // Not owned.
 
diff --git a/lib/testing/story_controller_mock.h b/lib/testing/story_controller_mock.h
index 6e8facd..2bd5669 100644
--- a/lib/testing/story_controller_mock.h
+++ b/lib/testing/story_controller_mock.h
@@ -32,16 +32,14 @@
   }
 
   // |fuchsia::modular::StoryController|
-  void Start(fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>
-                 request) override {
+  void RequestStart() override {
     FXL_NOTIMPLEMENTED();
   }
 
   // |fuchsia::modular::StoryController|
-  void RequestStart() override { FXL_NOTIMPLEMENTED(); }
-
-  // |fuchsia::modular::StoryController|
-  void Stop(StopCallback done) override { FXL_NOTIMPLEMENTED(); }
+  void Stop(StopCallback done) override {
+    FXL_NOTIMPLEMENTED();
+  }
 
   // |fuchsia::modular::StoryController|
   void TakeAndLoadSnapshot(
diff --git a/public/fidl/fuchsia.modular/story/story_controller.fidl b/public/fidl/fuchsia.modular/story/story_controller.fidl
index e0d345d..15648e2 100644
--- a/public/fidl/fuchsia.modular/story/story_controller.fidl
+++ b/public/fidl/fuchsia.modular/story/story_controller.fidl
@@ -15,17 +15,7 @@
     // Gets information associated with the story.
     1: GetInfo() -> (StoryInfo info, StoryState state);
 
-    // DEPRECATED in favor of RequestStart().
-    //
-    // Runs the story controlled by this |StoryController| instance if not yet
-    // running or requested to start, else does nothing. |view_owner| is an
-    // interface request for the view of the story shell of this story. If the
-    // story is already running, the view owner request is dropped. If Stop()
-    // requests are pending when this request is issued, the request is queued
-    // until the Stop() requests complete.
-    3: Start(request<fuchsia.ui.viewsv1token.ViewOwner> view_owner);
-
-    // Requests to runsthe story controlled by this |StoryController| instance.
+    // Requests to run the story controlled by this |StoryController| instance.
     // When the story starts, if not yet running, the view of the newly started
     // story shell will be passed in a call to SessionShell.AttachView().
     14: RequestStart();
diff --git a/tests/benchmarks/story/BUILD.gn b/tests/benchmarks/story/BUILD.gn
index ffabe06..ff63aa5 100644
--- a/tests/benchmarks/story/BUILD.gn
+++ b/tests/benchmarks/story/BUILD.gn
@@ -48,9 +48,11 @@
     "//garnet/public/lib/fsl",
     "//garnet/public/lib/fxl",
     "//peridot/lib/common:names",
+    "//peridot/lib/fidl:single_service_app",
     "//peridot/lib/rapidjson",
     "//peridot/public/lib/integration_testing/cpp",
-    "//peridot/lib/testing:component_base",
+    "//peridot/lib/testing:component_main",
+    "//peridot/lib/testing:session_shell_impl",
     "//peridot/public/fidl/fuchsia.modular",
   ]
 
diff --git a/tests/benchmarks/story/modular_benchmark_story.tspec b/tests/benchmarks/story/modular_benchmark_story.tspec
index f749fd7..8351e11 100644
--- a/tests/benchmarks/story/modular_benchmark_story.tspec
+++ b/tests/benchmarks/story/modular_benchmark_story.tspec
@@ -1,11 +1,11 @@
 {
   "test_suite_name": "fuchsia.modular",
   "app": "fuchsia-pkg://fuchsia.com/basemgr#meta/basemgr.cmx",
-  "args": ["--account_provider=dev_token_manager",
-           "--base_shell=dev_base_shell",
-           "--session_shell=modular_benchmark_story_session_shell",
+  "args": ["--account_provider=fuchsia-pkg://fuchsia.com/dev_token_manager#meta/dev_token_manager.cmx",
+           "--base_shell=fuchsia-pkg://fuchsia.com/dev_base_shell#meta/dev_base_shell.cmx",
+           "--session_shell=fuchsia-pkg://fuchsia.com/modular_benchmark_story_session_shell#meta/modular_benchmark_story_session_shell.cmx",
            "--session_shell_args=--story_count=20",
-           "--story_shell=dev_story_shell"],
+           "--story_shell=fuchsia-pkg://fuchsia.com/dev_story_shell#meta/dev_story_shell.cmx"],
   "categories": ["benchmark", "modular"],
   "duration": 120,
   "measure": [
diff --git a/tests/benchmarks/story/modular_benchmark_story_session_shell.cc b/tests/benchmarks/story/modular_benchmark_story_session_shell.cc
index 23b0f2b..5b4db09 100644
--- a/tests/benchmarks/story/modular_benchmark_story_session_shell.cc
+++ b/tests/benchmarks/story/modular_benchmark_story_session_shell.cc
@@ -23,7 +23,8 @@
 
 #include "peridot/lib/common/names.h"
 #include "peridot/lib/fidl/single_service_app.h"
-#include "peridot/lib/testing/component_base.h"
+#include "peridot/lib/testing/component_main.h"
+#include "peridot/lib/testing/session_shell_impl.h"
 #include "peridot/public/lib/integration_testing/cpp/reporting.h"
 #include "peridot/public/lib/integration_testing/cpp/testing.h"
 #include "peridot/tests/benchmarks/story/tracing_waiter.h"
@@ -43,7 +44,8 @@
     }
 
     module_url = command_line.GetOptionValueWithDefault(
-        "module_url", "modular_benchmark_story_module");
+        "module_url",
+        "fuchsia-pkg://fuchsia.com/modular_benchmark_story_module#meta/modular_benchmark_story_module.cmx");
   }
 
   int story_count{0};
@@ -60,8 +62,8 @@
 
   // Registers itself as a watcher on the given story. Only one story at a time
   // can be watched.
-  void Watch(fuchsia::modular::StoryControllerPtr* const story_controller) {
-    (*story_controller)->Watch(binding_.NewBinding());
+  void Watch(fuchsia::modular::StoryController* const story_controller) {
+    story_controller->Watch(binding_.NewBinding());
   }
 
   // Deregisters itself from the watched story.
@@ -107,8 +109,8 @@
 
   // Registers itself as a watcher on the given link. Only one story at a time
   // can be watched.
-  void Watch(fuchsia::modular::LinkPtr* const link) {
-    (*link)->WatchAll(binding_.NewBinding());
+  void Watch(fuchsia::modular::Link* const link) {
+    link->WatchAll(binding_.NewBinding());
   }
 
   // Deregisters itself from the watched story.
@@ -140,12 +142,15 @@
  public:
   TestApp(component::StartupContext* const startup_context, Settings settings)
       : ViewApp(startup_context), settings_(std::move(settings)) {
-    session_shell_context_ = startup_context->ConnectToEnvironmentService<
-        fuchsia::modular::SessionShellContext>();
+    startup_context->ConnectToEnvironmentService(
+        session_shell_context_.NewRequest());
     session_shell_context_->GetStoryProvider(story_provider_.NewRequest());
-    puppet_master_ =
-        startup_context
-            ->ConnectToEnvironmentService<fuchsia::modular::PuppetMaster>();
+
+    startup_context->ConnectToEnvironmentService(puppet_master_.NewRequest());
+
+    startup_context->outgoing().AddPublicService(
+        session_shell_impl_.GetHandler());
+
     tracing_waiter_.WaitForTracing([this] { Loop(); });
   }
 
@@ -220,7 +225,7 @@
     link_path.link_name = nullptr;
     story_controller_->GetLink(std::move(link_path), link_.NewRequest());
 
-    link_watcher_.Watch(&link_);
+    link_watcher_.Watch(link_.get());
     link_watcher_.Continue([this](fidl::StringPtr json) {
       FXL_LOG(INFO) << "Link() Watch: " << json;
       if (json == "") {
@@ -247,10 +252,8 @@
       TRACE_ASYNC_END("benchmark", "story/start", 0);
     });
 
-    story_watcher_.Watch(&story_controller_);
-
-    fidl::InterfaceHandle<fuchsia::ui::viewsv1token::ViewOwner> story_view;
-    story_controller_->Start(story_view.NewRequest());
+    story_watcher_.Watch(story_controller_.get());
+    story_controller_->RequestStart();
   }
 
   void StoryStop() {
@@ -279,6 +282,7 @@
 
   StoryWatcherImpl story_watcher_;
   LinkWatcherImpl link_watcher_;
+  modular::testing::SessionShellImpl session_shell_impl_;
 
   fuchsia::modular::PuppetMasterPtr puppet_master_;
   fuchsia::modular::StoryPuppetMasterPtr story_puppet_master_;
diff --git a/tests/session_shell/README.md b/tests/session_shell/README.md
index 92c97ea..2e3f80a 100644
--- a/tests/session_shell/README.md
+++ b/tests/session_shell/README.md
@@ -11,7 +11,7 @@
 * Be notified when story state changes.
 
 * Be notified through SessionShell.AttachView() of a new story view when story
-  start is requested by RequestStart() rather than Start().
+  start is requested by RequestStart().
 
 * Be notified through SessionShell.DetachView() of a story going away.
 
diff --git a/tests/session_shell/session_shell_test_session_shell.cc b/tests/session_shell/session_shell_test_session_shell.cc
index 71be6d5..4857cca 100644
--- a/tests/session_shell/session_shell_test_session_shell.cc
+++ b/tests/session_shell/session_shell_test_session_shell.cc
@@ -153,13 +153,6 @@
         component_context_.NewRequest());
     story_provider_state_watcher_.Watch(story_provider());
 
-    // Until we use RequestStart() for the first time, there must be no calls on
-    // the SessionShell service.
-    session_shell_impl()->set_on_attach_view(
-        [](ViewId) { Fail("AttachView() called without RequestStart()."); });
-    session_shell_impl()->set_on_detach_view(
-        [](ViewId) { Fail("DetachView() called without RequestStart()."); });
-
     TestComponentContext_GetPackageName_Works();
   }
 
@@ -178,8 +171,10 @@
     create_view_.Pass();
   }
 
-  // Test Case: When we call GetPackageName() on ComponentContext acquired from
-  // our environment, it works.
+  // Test Case GetPackageName:
+  //
+  // When we call GetPackageName() on ComponentContext acquired from our
+  // environment, it works.
 
   TestPoint component_context_package_name_{
       "ComponentContext.GetPackageName() works"};
@@ -194,7 +189,9 @@
     });
   }
 
-  // Test Case: The story info of a story that does not exist is null.
+  // Test Case GetStoryInfo Null:
+  //
+  // The story info of a story that does not exist is null.
 
   TestPoint get_story_info_null_{"StoryProvider.GetStoryInfo() is null"};
 
@@ -305,8 +302,7 @@
   TestPoint story1_run_{"Story1 Run"};
   void TestStory1_Run() {
     // Start and show the new story.
-    fidl::InterfaceHandle<fuchsia::ui::viewsv1token::ViewOwner> story_view;
-    story_controller_->Start(story_view.NewRequest());
+    story_controller_->RequestStart();
     story1_run_.Pass();
     TestStory1_Stop();
   }
@@ -391,8 +387,7 @@
 
     // Start and show the new story *while* the GetInfo() call above is in
     // flight.
-    fidl::InterfaceHandle<fuchsia::ui::viewsv1token::ViewOwner> story_view;
-    story_controller_->Start(story_view.NewRequest());
+    story_controller_->RequestStart();
 
     story_controller_->GetInfo([this](fuchsia::modular::StoryInfo info,
                                       fuchsia::modular::StoryState state) {
@@ -487,8 +482,7 @@
   TestPoint story3_run_{"Story3 Run"};
 
   void TestStory3_Run() {
-    fidl::InterfaceHandle<fuchsia::ui::viewsv1token::ViewOwner> story_view;
-    story_controller_->Start(story_view.NewRequest());
+    story_controller_->RequestStart();
 
     story_controller_->GetInfo([this](fuchsia::modular::StoryInfo info,
                                       fuchsia::modular::StoryState state) {
