diff --git a/bin/sessionmgr/puppet_master/command_runners/add_mod_command_runner.cc b/bin/sessionmgr/puppet_master/command_runners/add_mod_command_runner.cc
index 55bc3b2..de39cd5 100644
--- a/bin/sessionmgr/puppet_master/command_runners/add_mod_command_runner.cc
+++ b/bin/sessionmgr/puppet_master/command_runners/add_mod_command_runner.cc
@@ -26,13 +26,33 @@
   FXL_CHECK(command.is_add_mod());
 
   auto& add_mod = command.add_mod();
+  if (add_mod.mod_name.size() == 0) {
+    fuchsia::modular::ExecuteResult result;
+    result.status = fuchsia::modular::ExecuteStatus::INVALID_COMMAND;
+    result.error_message = "A Module name must be specified";
+    done(result);
+    return;
+  }
+
+  AddModParams params;
+  params.parent_mod_path = std::move(add_mod.surface_parent_mod_name);
+  if (add_mod.mod_name.size() == 1) {
+    params.mod_name = add_mod.mod_name[0];
+  } else {
+    params.mod_name = add_mod.mod_name.back();
+
+    add_mod.mod_name.pop_back();
+    params.parent_mod_path = add_mod.mod_name;
+  }
+  params.is_embedded = false;
+  params.intent = std::move(add_mod.intent);
+  params.surface_relation = std::make_unique<fuchsia::modular::SurfaceRelation>(
+      std::move(add_mod.surface_relation));
+  params.module_source = fuchsia::modular::ModuleSource::EXTERNAL;
+
   AddAddModOperation(
       &operation_queue_, story_storage, module_resolver_, entity_resolver_,
-      std::move(add_mod.mod_name), std::move(add_mod.intent),
-      std::make_unique<fuchsia::modular::SurfaceRelation>(
-          std::move(add_mod.surface_relation)),
-      std::move(add_mod.surface_parent_mod_name),
-      fuchsia::modular::ModuleSource::EXTERNAL,
+      std::move(params),
       [done = std::move(done)](fuchsia::modular::ExecuteResult result,
                                fuchsia::modular::ModuleData module_data) {
         done(std::move(result));
diff --git a/bin/sessionmgr/puppet_master/command_runners/add_mod_command_runner_unittest.cc b/bin/sessionmgr/puppet_master/command_runners/add_mod_command_runner_unittest.cc
index cef88ef..7337588 100644
--- a/bin/sessionmgr/puppet_master/command_runners/add_mod_command_runner_unittest.cc
+++ b/bin/sessionmgr/puppet_master/command_runners/add_mod_command_runner_unittest.cc
@@ -606,8 +606,8 @@
   // Get the link path for the param of the mod we created.
   fuchsia::modular::LinkPath link_path;
   std::vector<std::string> full_path{"parent_mod", "mod"};
-  story_storage_->ReadModuleData(full_path)
-      ->Then([&](fuchsia::modular::ModuleDataPtr result) {
+  story_storage_->ReadModuleData(full_path)->Then(
+      [&](fuchsia::modular::ModuleDataPtr result) {
         for (auto& entry : result->parameter_map.entries) {
           if (entry.name == "param_json") {
             fidl::Clone(entry.link_path, &link_path);
diff --git a/bin/sessionmgr/puppet_master/command_runners/operation_calls/add_mod_call.cc b/bin/sessionmgr/puppet_master/command_runners/operation_calls/add_mod_call.cc
index 08e7616..3afea2f 100644
--- a/bin/sessionmgr/puppet_master/command_runners/operation_calls/add_mod_call.cc
+++ b/bin/sessionmgr/puppet_master/command_runners/operation_calls/add_mod_call.cc
@@ -25,20 +25,12 @@
   AddModCall(StoryStorage* const story_storage,
              fuchsia::modular::ModuleResolver* const module_resolver,
              fuchsia::modular::EntityResolver* const entity_resolver,
-             std::vector<std::string> mod_name,
-             fuchsia::modular::Intent intent,
-             fuchsia::modular::SurfaceRelationPtr surface_relation,
-             std::vector<std::string> surface_parent_mod_name,
-             fuchsia::modular::ModuleSource module_source, ResultCall done)
+             AddModParams add_mod_params, ResultCall done)
       : Operation("AddModCommandRunner::AddModCall", std::move(done)),
         story_storage_(story_storage),
         module_resolver_(module_resolver),
         entity_resolver_(entity_resolver),
-        mod_name_(std::move(mod_name)),
-        intent_(std::move(intent)),
-        surface_relation_(std::move(surface_relation)),
-        surface_parent_mod_name_(std::move(surface_parent_mod_name)),
-        module_source_(module_source) {}
+        add_mod_params_(std::move(add_mod_params)) {}
 
  private:
   void Run() override {
@@ -52,10 +44,11 @@
     // resolve the (action, parameter) and the supplied optional handler to a
     // module. If the module resolver doesn't recognize a supplied handler, we
     // forgivingly execute the handler anyway.
-    if (!intent_.action.is_null()) {
+    if (!add_mod_params_.intent.action.is_null()) {
       AddFindModulesOperation(
           &operation_queue_, module_resolver_, entity_resolver_,
-          CloneOptional(intent_), surface_parent_mod_name_,
+          CloneOptional(add_mod_params_.intent),
+          add_mod_params_.parent_mod_path,
           [this, flow](fuchsia::modular::ExecuteResult result,
                        fuchsia::modular::FindModulesResponse response) {
             if (result.status != fuchsia::modular::ExecuteStatus::OK) {
@@ -81,7 +74,7 @@
               } break;
 
               case fuchsia::modular::FindModulesStatus::UNKNOWN_HANDLER: {
-                candidate_module_.module_id = intent_.handler;
+                candidate_module_.module_id = add_mod_params_.intent.handler;
               } break;
             }
 
@@ -89,9 +82,9 @@
           });
     } else {
       // We arrive here if the Intent has a handler, but no action.
-      FXL_DCHECK(!intent_.handler.is_null())
+      FXL_DCHECK(!add_mod_params_.intent.handler.is_null())
           << "Cannot start a module without an action or a handler";
-      candidate_module_.module_id = intent_.handler;
+      candidate_module_.module_id = add_mod_params_.intent.handler;
 
       CreateLinks(flow);
     }
@@ -104,9 +97,8 @@
         return;
         // Operation finishes since |flow| goes out of scope.
       }
-      auto full_module_path = surface_parent_mod_name_;
-      full_module_path.insert(full_module_path.end(), mod_name_.begin(),
-                               mod_name_.end());
+      auto full_module_path = add_mod_params_.parent_mod_path;
+      full_module_path.push_back(add_mod_params_.mod_name);
       AddInitializeChainOperation(
           &operation_queue_, story_storage_, std::move(full_module_path),
           std::move(parameter_info_),
@@ -130,9 +122,9 @@
 
     std::vector<FuturePtr<fuchsia::modular::CreateModuleParameterMapEntry>>
         did_get_entries;
-    did_get_entries.reserve(intent_.parameters->size());
+    did_get_entries.reserve(add_mod_params_.intent.parameters->size());
 
-    for (auto& param : *intent_.parameters) {
+    for (auto& param : *add_mod_params_.intent.parameters) {
       fuchsia::modular::CreateModuleParameterMapEntry entry;
       entry.key = param.name;
 
@@ -195,14 +187,15 @@
                        fuchsia::modular::ModuleParameterMapPtr map) {
     fidl::Clone(*map, &out_module_data_.parameter_map);
     out_module_data_.module_url = candidate_module_.module_id;
-    out_module_data_.module_path = surface_parent_mod_name_;
-    out_module_data_.module_path.insert(out_module_data_.module_path.end(),
-                                         mod_name_.begin(), mod_name_.end());
-    out_module_data_.module_source = module_source_;
+    out_module_data_.module_path = add_mod_params_.parent_mod_path;
+    out_module_data_.module_path.push_back(add_mod_params_.mod_name);
+    out_module_data_.module_source = add_mod_params_.module_source;
     out_module_data_.module_deleted = false;
-    fidl::Clone(surface_relation_, &out_module_data_.surface_relation);
-    out_module_data_.intent =
-        std::make_unique<fuchsia::modular::Intent>(std::move(intent_));
+    fidl::Clone(add_mod_params_.surface_relation,
+                &out_module_data_.surface_relation);
+    out_module_data_.is_embedded = add_mod_params_.is_embedded;
+    out_module_data_.intent = std::make_unique<fuchsia::modular::Intent>(
+        std::move(add_mod_params_.intent));
 
     // Operation stays alive until flow goes out of scope.
     fuchsia::modular::ModuleData module_data;
@@ -214,11 +207,7 @@
   StoryStorage* const story_storage_;                        // Not owned.
   fuchsia::modular::ModuleResolver* const module_resolver_;  // Not owned.
   fuchsia::modular::EntityResolver* const entity_resolver_;  // Not owned.
-  std::vector<std::string> mod_name_;
-  fuchsia::modular::Intent intent_;
-  fuchsia::modular::SurfaceRelationPtr surface_relation_;
-  std::vector<std::string> surface_parent_mod_name_;
-  fuchsia::modular::ModuleSource module_source_;
+  modular::AddModParams add_mod_params_;
   fuchsia::modular::FindModulesResult candidate_module_;
   fuchsia::modular::CreateModuleParameterMapInfoPtr parameter_info_;
   fuchsia::modular::ModuleData out_module_data_;
@@ -234,21 +223,16 @@
 
 }  // namespace
 
-void AddAddModOperation(
-    OperationContainer* const container, StoryStorage* const story_storage,
-    fuchsia::modular::ModuleResolver* const module_resolver,
-    fuchsia::modular::EntityResolver* const entity_resolver,
-    std::vector<std::string> mod_name, fuchsia::modular::Intent intent,
-    fuchsia::modular::SurfaceRelationPtr surface_relation,
-    std::vector<std::string> surface_parent_mod_name,
-    fuchsia::modular::ModuleSource module_source,
-    std::function<void(fuchsia::modular::ExecuteResult,
-                       fuchsia::modular::ModuleData)>
-        done) {
-  container->Add(new AddModCall(
-      story_storage, module_resolver, entity_resolver, std::move(mod_name),
-      std::move(intent), std::move(surface_relation),
-      std::move(surface_parent_mod_name), module_source, std::move(done)));
+void AddAddModOperation(OperationContainer* const container,
+                        StoryStorage* const story_storage,
+                        fuchsia::modular::ModuleResolver* const module_resolver,
+                        fuchsia::modular::EntityResolver* const entity_resolver,
+                        AddModParams add_mod_params,
+                        std::function<void(fuchsia::modular::ExecuteResult,
+                                           fuchsia::modular::ModuleData)>
+                            done) {
+  container->Add(new AddModCall(story_storage, module_resolver, entity_resolver,
+                                std::move(add_mod_params), std::move(done)));
 }
 
 }  // namespace modular
diff --git a/bin/sessionmgr/puppet_master/command_runners/operation_calls/add_mod_call.h b/bin/sessionmgr/puppet_master/command_runners/operation_calls/add_mod_call.h
index 75d4459..752c35e 100644
--- a/bin/sessionmgr/puppet_master/command_runners/operation_calls/add_mod_call.h
+++ b/bin/sessionmgr/puppet_master/command_runners/operation_calls/add_mod_call.h
@@ -12,17 +12,37 @@
 
 namespace modular {
 
-void AddAddModOperation(
-    OperationContainer* container, StoryStorage* story_storage,
-    fuchsia::modular::ModuleResolver* module_resolver,
-    fuchsia::modular::EntityResolver* entity_resolver,
-    std::vector<std::string> mod_name, fuchsia::modular::Intent intent,
-    fuchsia::modular::SurfaceRelationPtr surface_relation,
-    std::vector<std::string> surface_parent_mod_name,
-    fuchsia::modular::ModuleSource module_source,
-    std::function<void(fuchsia::modular::ExecuteResult,
-                       fuchsia::modular::ModuleData)>
-        done);
+// This struct contains common parameters needed to add a module to a story,
+// useful as a single place to add more parameters that need shuffling around.
+// See story_command.fidl and module_data.fidl for a detailed description of
+// what these parameters mean.
+struct AddModParams {
+  // This parent module's module path. If empty, this mod has no parent module.
+  std::vector<std::string> parent_mod_path;
+  // Module name given to this module path (parent_mod_path + mod_name is this
+  // module's module path).
+  std::string mod_name;
+
+  // True if this is an embedded mod (as opposed to being arranged by the story
+  // shell), in which case this mod's view will be embedded by its parent mod
+  // (represented by parent_mod_path).
+  bool is_embedded;
+
+  // See |fuchsia::modular::ModuleData| (module_data.fidl) for a detailed
+  // description of what these parameters mean.
+  fuchsia::modular::Intent intent;
+  fuchsia::modular::SurfaceRelationPtr surface_relation;
+  fuchsia::modular::ModuleSource module_source;
+};
+
+void AddAddModOperation(OperationContainer* container,
+                        StoryStorage* story_storage,
+                        fuchsia::modular::ModuleResolver* module_resolver,
+                        fuchsia::modular::EntityResolver* entity_resolver,
+                        AddModParams add_mod_params,
+                        std::function<void(fuchsia::modular::ExecuteResult,
+                                           fuchsia::modular::ModuleData)>
+                            done);
 
 }  // namespace modular
 
diff --git a/bin/sessionmgr/storage/story_storage_xdr.cc b/bin/sessionmgr/storage/story_storage_xdr.cc
index 3129040..baed8c6 100644
--- a/bin/sessionmgr/storage/story_storage_xdr.cc
+++ b/bin/sessionmgr/storage/story_storage_xdr.cc
@@ -191,8 +191,25 @@
   xdr->Field("chain_data", &data->parameter_map, XdrModuleParameterMap);
 }
 
+void XdrModuleData_v6(XdrContext* const xdr,
+                      fuchsia::modular::ModuleData* const data) {
+  if (!xdr->Version(6)) {
+    return;
+  }
+  xdr->Field("url", &data->module_url);
+  xdr->Field("module_path", &data->module_path);
+  xdr->Field("module_source", &data->module_source);
+  xdr->Field("surface_relation", &data->surface_relation, XdrSurfaceRelation);
+  xdr->Field("module_deleted", &data->module_deleted);
+  xdr->Field("intent", &data->intent, XdrIntent);
+  // NOTE: the JSON field naming doesn't match the FIDL struct naming because
+  // the field name in FIDL was changed.
+  xdr->Field("chain_data", &data->parameter_map, XdrModuleParameterMap);
+  xdr->Field("is_embedded", &data->is_embedded);
+}
+
 XdrFilterType<fuchsia::modular::ModuleData> XdrModuleData[] = {
-    XdrModuleData_v5, XdrModuleData_v4, XdrModuleData_v3,
+    XdrModuleData_v6, XdrModuleData_v5, XdrModuleData_v4, XdrModuleData_v3,
     XdrModuleData_v2, XdrModuleData_v1, nullptr,
 };
 
diff --git a/bin/sessionmgr/story_runner/module_context_impl.cc b/bin/sessionmgr/story_runner/module_context_impl.cc
index ba5604c..ff78b8d 100644
--- a/bin/sessionmgr/story_runner/module_context_impl.cc
+++ b/bin/sessionmgr/story_runner/module_context_impl.cc
@@ -11,8 +11,8 @@
 #include <lib/fxl/strings/join_strings.h>
 
 #include "peridot/bin/sessionmgr/storage/constants_and_utils.h"
-#include "peridot/bin/sessionmgr/story_runner/story_controller_impl.h"
 #include "peridot/bin/sessionmgr/story/systems/story_visibility_system.h"
+#include "peridot/bin/sessionmgr/story_runner/story_controller_impl.h"
 #include "peridot/lib/fidl/clone.h"
 
 namespace modular {
@@ -75,10 +75,16 @@
         module_controller,
     fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner> view_owner,
     EmbedModuleCallback callback) {
-  story_controller_impl_->EmbedModule(
-      module_data_->module_path, name, fidl::MakeOptional(std::move(intent)),
-      std::move(module_controller), std::move(view_owner),
-      fuchsia::modular::ModuleSource::INTERNAL, callback);
+  AddModParams params;
+  params.parent_mod_path = module_data_->module_path;
+  params.mod_name = name;
+  params.intent = std::move(intent);
+  params.module_source = fuchsia::modular::ModuleSource::INTERNAL;
+  params.surface_relation = nullptr;
+  params.is_embedded = true;
+  story_controller_impl_->EmbedModule(std::move(params),
+                                      std::move(module_controller),
+                                      std::move(view_owner), callback);
 }
 
 void ModuleContextImpl::AddModuleToStory(
@@ -87,10 +93,15 @@
         module_controller,
     fuchsia::modular::SurfaceRelationPtr surface_relation,
     AddModuleToStoryCallback callback) {
-  story_controller_impl_->StartModule(
-      module_data_->module_path, name, fidl::MakeOptional(std::move(intent)),
-      std::move(module_controller), std::move(surface_relation),
-      fuchsia::modular::ModuleSource::INTERNAL, callback);
+  AddModParams params;
+  params.parent_mod_path = module_data_->module_path;
+  params.mod_name = name;
+  params.intent = std::move(intent);
+  params.module_source = fuchsia::modular::ModuleSource::INTERNAL;
+  params.surface_relation = std::move(surface_relation);
+  params.is_embedded = false;
+  story_controller_impl_->AddModuleToStory(
+      std::move(params), std::move(module_controller), callback);
 }
 
 void ModuleContextImpl::StartContainerInShell(
diff --git a/bin/sessionmgr/story_runner/module_context_impl.h b/bin/sessionmgr/story_runner/module_context_impl.h
index 7150642..35cb4ca 100644
--- a/bin/sessionmgr/story_runner/module_context_impl.h
+++ b/bin/sessionmgr/story_runner/module_context_impl.h
@@ -17,6 +17,7 @@
 #include <lib/fxl/macros.h>
 
 #include "peridot/bin/sessionmgr/component_context_impl.h"
+#include "peridot/bin/sessionmgr/puppet_master/command_runners/operation_calls/add_mod_call.h"
 
 namespace modular {
 
diff --git a/bin/sessionmgr/story_runner/story_controller_impl.cc b/bin/sessionmgr/story_runner/story_controller_impl.cc
index f7ac3af..487e4eb 100644
--- a/bin/sessionmgr/story_runner/story_controller_impl.cc
+++ b/bin/sessionmgr/story_runner/story_controller_impl.cc
@@ -140,8 +140,7 @@
         module_data_(std::move(module_data)),
         module_controller_request_(std::move(module_controller_request)),
         view_owner_request_(std::move(view_owner_request)),
-        start_time_(zx_clock_get(ZX_CLOCK_UTC)) {
-  }
+        start_time_(zx_clock_get(ZX_CLOCK_UTC)) {}
 
  private:
   void Run() override {
@@ -393,11 +392,13 @@
   }
 
   void LoadModuleManifest(FlowToken flow) {
-    story_controller_impl_->story_provider_impl_->module_facet_reader()->GetModuleManifest(
-        module_data_.module_url, [this, flow] (fuchsia::modular::ModuleManifestPtr manifest) {
-          module_manifest_ = std::move(manifest);
-          MaybeConnectViewToStoryShell(flow);
-        });
+    story_controller_impl_->story_provider_impl_->module_facet_reader()
+        ->GetModuleManifest(
+            module_data_.module_url,
+            [this, flow](fuchsia::modular::ModuleManifestPtr manifest) {
+              module_manifest_ = std::move(manifest);
+              MaybeConnectViewToStoryShell(flow);
+            });
   }
 
   void MaybeConnectViewToStoryShell(FlowToken flow) {
@@ -431,8 +432,13 @@
 
     auto manifest_clone = fuchsia::modular::ModuleManifest::New();
     fidl::Clone(module_manifest_, &manifest_clone);
-    auto surface_relation_clone = fuchsia::modular::SurfaceRelation::New();
-    module_data_.surface_relation->Clone(surface_relation_clone.get());
+
+    fuchsia::modular::SurfaceRelationPtr surface_relation_clone;
+    if (module_data_.surface_relation) {
+      surface_relation_clone = fuchsia::modular::SurfaceRelation::New();
+      module_data_.surface_relation->Clone(surface_relation_clone.get());
+    }
+
     story_controller_impl_->pending_views_.emplace(
         ModulePathToSurfaceID(module_data_.module_path),
         PendingView{module_data_.module_path, std::move(manifest_clone),
@@ -716,8 +722,8 @@
     // we do not have the necessary capabilities (the ViewOwner). However,
     // mods added through ModuleContext.AddModuleToStory() can be started
     // automatically.
-    if (module_data_.module_source !=
-        fuchsia::modular::ModuleSource::EXTERNAL) {
+    if (module_data_.module_source ==
+        fuchsia::modular::ModuleSource::INTERNAL) {
       return;
     }
 
@@ -798,25 +804,17 @@
     : public Operation<fuchsia::modular::StartModuleStatus> {
  public:
   AddIntentCall(StoryControllerImpl* const story_controller_impl,
-                std::vector<std::string> requesting_module_path,
-                const std::string& module_name,
-                fuchsia::modular::IntentPtr intent,
+                AddModParams add_mod_params,
                 fidl::InterfaceRequest<fuchsia::modular::ModuleController>
                     module_controller_request,
-                fuchsia::modular::SurfaceRelationPtr surface_relation,
                 fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>
                     view_owner_request,
-                const fuchsia::modular::ModuleSource module_source,
                 ResultCall result_call)
       : Operation("StoryControllerImpl::AddIntentCall", std::move(result_call)),
         story_controller_impl_(story_controller_impl),
-        requesting_module_path_(std::move(requesting_module_path)),
-        module_name_(module_name),
-        intent_(std::move(intent)),
+        add_mod_params_(std::move(add_mod_params)),
         module_controller_request_(std::move(module_controller_request)),
-        surface_relation_(std::move(surface_relation)),
-        view_owner_request_(std::move(view_owner_request)),
-        module_source_(module_source) {}
+        view_owner_request_(std::move(view_owner_request)) {}
 
  private:
   void Run() {
@@ -825,9 +823,7 @@
         &operation_queue_, story_controller_impl_->story_storage_,
         story_controller_impl_->story_provider_impl_->module_resolver(),
         story_controller_impl_->story_provider_impl_->entity_resolver(),
-        std::vector<std::string>({module_name_}), std::move(*intent_),
-        std::move(surface_relation_), std::move(requesting_module_path_),
-        module_source_,
+        std::move(add_mod_params_),
         [this, flow](fuchsia::modular::ExecuteResult result,
                      fuchsia::modular::ModuleData module_data) {
           if (result.status ==
@@ -842,11 +838,11 @@
                 << "error response with message: " << result.error_message;
           }
           module_data_ = std::move(module_data);
-          MaybeLaunchModule(flow);
+          LaunchModuleIfStoryRunning(flow);
         });
   }
 
-  void MaybeLaunchModule(FlowToken flow) {
+  void LaunchModuleIfStoryRunning(FlowToken flow) {
     if (story_controller_impl_->IsRunning()) {
       // TODO(thatguy): Should we be checking surface_relation also?
       if (!view_owner_request_) {
@@ -879,17 +875,13 @@
   OperationQueue operation_queue_;
   StoryControllerImpl* const story_controller_impl_;
 
-  // Arguments passed in from the constructor. Some are used to initialize
+  // Some of the fields in add_mod_params_ are used to initializel
   // module_data_ in AddModuleFromResult().
-  std::vector<std::string> requesting_module_path_;
-  const std::string module_name_;
-  fuchsia::modular::IntentPtr intent_;
+  AddModParams add_mod_params_;
   fidl::InterfaceRequest<fuchsia::modular::ModuleController>
       module_controller_request_;
-  fuchsia::modular::SurfaceRelationPtr surface_relation_;
   fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>
       view_owner_request_;
-  const fuchsia::modular::ModuleSource module_source_;
 
   // Created by AddModuleFromResult, and ultimately written to story state.
   fuchsia::modular::ModuleData module_data_;
@@ -902,9 +894,8 @@
 
 class StoryControllerImpl::StartCall : public Operation<> {
  public:
-  StartCall(
-      StoryControllerImpl* const story_controller_impl,
-      StoryStorage* const storage)
+  StartCall(StoryControllerImpl* const story_controller_impl,
+            StoryStorage* const storage)
       : Operation("StoryControllerImpl::StartCall", [] {}),
         story_controller_impl_(story_controller_impl),
         storage_(storage) {}
@@ -927,9 +918,10 @@
     storage_->ReadAllModuleData()->Then(
         [this, flow](std::vector<fuchsia::modular::ModuleData> data) {
           story_controller_impl_->InitStoryEnvironment();
-
           for (auto& module_data : data) {
-            if (module_data.module_deleted) {
+            // Don't start the module if it is embedded, or if it has been
+            // marked deleted.
+            if (module_data.module_deleted || module_data.is_embedded) {
               continue;
             }
             FXL_CHECK(module_data.intent);
@@ -1230,34 +1222,25 @@
 }
 
 void StoryControllerImpl::EmbedModule(
-    const std::vector<std::string>& parent_module_path,
-    std::string module_name, fuchsia::modular::IntentPtr intent,
+    AddModParams add_mod_params,
     fidl::InterfaceRequest<fuchsia::modular::ModuleController>
         module_controller_request,
     fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>
         view_owner_request,
-    fuchsia::modular::ModuleSource module_source,
     std::function<void(fuchsia::modular::StartModuleStatus)> callback) {
   operation_queue_.Add(new AddIntentCall(
-      this, parent_module_path, module_name, std::move(intent),
-      std::move(module_controller_request), nullptr /* surface_relation */,
-      std::move(view_owner_request), std::move(module_source),
-      std::move(callback)));
+      this, std::move(add_mod_params), std::move(module_controller_request),
+      std::move(view_owner_request), std::move(callback)));
 }
 
-void StoryControllerImpl::StartModule(
-    const std::vector<std::string>& parent_module_path,
-    std::string module_name, fuchsia::modular::IntentPtr intent,
+void StoryControllerImpl::AddModuleToStory(
+    AddModParams add_mod_params,
     fidl::InterfaceRequest<fuchsia::modular::ModuleController>
         module_controller_request,
-    fuchsia::modular::SurfaceRelationPtr surface_relation,
-    fuchsia::modular::ModuleSource module_source,
     std::function<void(fuchsia::modular::StartModuleStatus)> callback) {
   operation_queue_.Add(new AddIntentCall(
-      this, parent_module_path, module_name, std::move(intent),
-      std::move(module_controller_request), std::move(surface_relation),
-      nullptr /* view_owner_request */, std::move(module_source),
-      std::move(callback)));
+      this, std::move(add_mod_params), std::move(module_controller_request),
+      nullptr /* view_owner_request */, std::move(callback)));
 }
 
 void StoryControllerImpl::ProcessPendingViews() {
@@ -1328,7 +1311,6 @@
 
 void StoryControllerImpl::OnModuleDataUpdated(
     fuchsia::modular::ModuleData module_data) {
-  // Control reaching here means that this update came from a remote device.
   operation_queue_.Add(
       new OnModuleDataUpdatedCall(this, std::move(module_data)));
 }
diff --git a/bin/sessionmgr/story_runner/story_controller_impl.h b/bin/sessionmgr/story_runner/story_controller_impl.h
index c72b43c..1560544 100644
--- a/bin/sessionmgr/story_runner/story_controller_impl.h
+++ b/bin/sessionmgr/story_runner/story_controller_impl.h
@@ -30,6 +30,7 @@
 #include <lib/fidl/cpp/interface_request.h>
 #include <lib/fxl/macros.h>
 
+#include "peridot/bin/sessionmgr/puppet_master/command_runners/operation_calls/add_mod_call.h"
 #include "peridot/bin/sessionmgr/storage/session_storage.h"
 #include "peridot/bin/sessionmgr/story/model/story_mutator.h"
 #include "peridot/bin/sessionmgr/story/model/story_observer.h"
@@ -106,34 +107,27 @@
 
   // Called by ModuleContextImpl.
   fuchsia::modular::LinkPathPtr GetLinkPathForParameterName(
-      const std::vector<std::string>& module_path,
-      std::string name);
+      const std::vector<std::string>& module_path, std::string name);
 
   // Called by ModuleContextImpl.
   void EmbedModule(
-      const std::vector<std::string>& parent_module_path,
-      std::string module_name, fuchsia::modular::IntentPtr intent,
+      AddModParams add_mod_params,
       fidl::InterfaceRequest<fuchsia::modular::ModuleController>
           module_controller_request,
       fidl::InterfaceRequest<fuchsia::ui::viewsv1token::ViewOwner>
           view_owner_request,
-      fuchsia::modular::ModuleSource module_source,
       std::function<void(fuchsia::modular::StartModuleStatus)> callback);
 
   // Called by ModuleContextImpl.
-  void StartModule(
-      const std::vector<std::string>& parent_module_path,
-      std::string module_name, fuchsia::modular::IntentPtr intent,
+  void AddModuleToStory(
+      AddModParams add_mod_params,
       fidl::InterfaceRequest<fuchsia::modular::ModuleController>
           module_controller_request,
-      fuchsia::modular::SurfaceRelationPtr surface_relation,
-      fuchsia::modular::ModuleSource module_source,
       std::function<void(fuchsia::modular::StartModuleStatus)> callback);
 
   // Stops the module at |module_path| in response to a call to
   // |ModuleContext.RemoveSelfFromStory|.
-  void RemoveModuleFromStory(
-      const std::vector<std::string>& module_path);
+  void RemoveModuleFromStory(const std::vector<std::string>& module_path);
 
   // Called by ModuleContextImpl.
   void StartOngoingActivity(
@@ -214,8 +208,8 @@
   const fidl::StringPtr story_id_;
 
   StoryProviderImpl* const story_provider_impl_;  // Not owned.
-  SessionStorage* const session_storage_;  // Not owned.
-  StoryStorage* const story_storage_;      // Not owned.
+  SessionStorage* const session_storage_;         // Not owned.
+  StoryStorage* const story_storage_;             // Not owned.
 
   std::unique_ptr<StoryMutator> story_mutator_;
   std::unique_ptr<StoryObserver> story_observer_;
@@ -250,7 +244,7 @@
   // serialized module path) until its parent is connected to story shell. Story
   // shell cannot display views whose parents are not yet displayed.
   struct PendingView {
-   std::vector<std::string> module_path;
+    std::vector<std::string> module_path;
     fuchsia::modular::ModuleManifestPtr module_manifest;
     fuchsia::modular::SurfaceRelationPtr surface_relation;
     fuchsia::modular::ModuleSource module_source;
diff --git a/packages/tests/modular_integration_tests b/packages/tests/modular_integration_tests
index d5a82d3..a18cf17 100644
--- a/packages/tests/modular_integration_tests
+++ b/packages/tests/modular_integration_tests
@@ -14,6 +14,7 @@
         "//peridot/tests/component_context:component_context_test_unstoppable_agent",
         "//peridot/tests/embed_shell:embed_shell_test_child_module",
         "//peridot/tests/embed_shell:embed_shell_test_parent_module",
+        "//peridot/tests/embed_shell:embed_shell_test_session_shell",
         "//peridot/tests/embed_shell:embed_shell_test_story_shell",
         "//peridot/tests/intents:intent_test_parent_module",
         "//peridot/tests/intents:intent_test_child_module",
diff --git a/public/fidl/fuchsia.modular/module/module_data.fidl b/public/fidl/fuchsia.modular/module/module_data.fidl
index 31b36ba..b55eafe 100644
--- a/public/fidl/fuchsia.modular/module/module_data.fidl
+++ b/public/fidl/fuchsia.modular/module/module_data.fidl
@@ -40,16 +40,21 @@
     /// required once the framework is cleaned up enough to guarantee this
     /// statement.
     Intent? intent;
+
+    /// If true, this module was started by a parent module using
+    /// ModuleContext.EmbedModule(), and its view is not managed by the
+    /// StoryShell.
+    bool is_embedded = false;
 };
 
 enum ModuleSource {
-    /// Module that was started from within the story by another module via
-    /// ModuleContext.StartModule() and ModuleContext.EmbedModule().
+    /// Module that was added to the story from within the story by another
+    /// module using ModuleContext.AddModuleToStory() or
+    /// ModuleContext.EmbedModule().
     INTERNAL = 0;
 
-    /// Module that was started from outside the story by Maxwell / SessionShell via
-    /// StoryController.AddModule() or StoryProvider.CreateStory() as first
-    /// module.
+    /// Module that was added to the story from outside the story using
+    /// PuppetMaster.
     EXTERNAL = 1;
 };
 
diff --git a/public/fidl/fuchsia.modular/story/puppet_master.fidl b/public/fidl/fuchsia.modular/story/puppet_master.fidl
index dfb7138..23587b9 100644
--- a/public/fidl/fuchsia.modular/story/puppet_master.fidl
+++ b/public/fidl/fuchsia.modular/story/puppet_master.fidl
@@ -18,8 +18,8 @@
     // either don't add one, or remove the last one.
     STORY_MUST_HAVE_MODS = 3;
 
-    // The mod specified in AddMod, RemoveMod or SendModCommand
-    // was not found.
+    // The mod name specified in AddMod, RemoveMod or SendModCommand
+    // was not found, or is invalid.
     INVALID_MOD = 4;
 
     // Resolution of the intent provided in AddMod returned zero results.
diff --git a/tests/embed_shell/BUILD.gn b/tests/embed_shell/BUILD.gn
index 7404b6f..d139e1a 100644
--- a/tests/embed_shell/BUILD.gn
+++ b/tests/embed_shell/BUILD.gn
@@ -39,6 +39,35 @@
   ]
 }
 
+executable_package("embed_shell_test_session_shell") {
+  deprecated_bare_package_url = "//build"
+
+  testonly = true
+
+  meta = [
+    {
+      path = "meta/embed_shell_test_session_shell.cmx"
+      dest = "embed_shell_test_session_shell.cmx"
+    },
+  ]
+
+  sources = [
+    "embed_shell_test_session_shell.cc",
+  ]
+
+  deps = [
+    ":defs",
+    "//garnet/public/fidl/fuchsia.ui.viewsv1",
+    "//garnet/public/lib/callback",
+    "//peridot/public/lib/integration_testing/cpp",
+    "//peridot/public/fidl/fuchsia.modular",
+    "//peridot/lib/testing:component_main",
+    "//peridot/lib/testing:session_shell_base",
+    "//peridot/tests/common:defs",
+    "//zircon/public/lib/async-loop-cpp",
+  ]
+}
+
 executable_package("embed_shell_test_parent_module") {
   deprecated_bare_package_url = "//build"
 
diff --git a/tests/embed_shell/defs.h b/tests/embed_shell/defs.h
index 3d25f90..3cd0c37 100644
--- a/tests/embed_shell/defs.h
+++ b/tests/embed_shell/defs.h
@@ -7,14 +7,24 @@
 
 namespace {
 
+constexpr char kStoryName[] = "story";
+
 constexpr char kChildModuleName[] = "child";
 
 // Package URLs of the test components used here.
 constexpr char kChildModuleUrl[] =
-    "fuchsia-pkg://fuchsia.com/embed_shell_test_child_module#meta/embed_shell_test_child_module.cmx";
+    "fuchsia-pkg://fuchsia.com/embed_shell_test_child_module#meta/"
+    "embed_shell_test_child_module.cmx";
 
+constexpr char kParentModuleUrl[] =
+    "fuchsia-pkg://fuchsia.com/embed_shell_test_parent_module#meta/"
+    "embed_shell_test_parent_module.cmx";
+
+constexpr char kParentModuleAction[] = "action";
 constexpr char kChildModuleAction[] = "action";
 
+constexpr char kParentModuleDoneSignal[] = "parent_module_done";
+
 }  // namespace
 
 #endif  // PERIDOT_TESTS_EMBED_SHELL_DEFS_H_
diff --git a/tests/embed_shell/embed_shell_test_parent_module.cc b/tests/embed_shell/embed_shell_test_parent_module.cc
index 9a68e0a..f5f7a15 100644
--- a/tests/embed_shell/embed_shell_test_parent_module.cc
+++ b/tests/embed_shell/embed_shell_test_parent_module.cc
@@ -51,7 +51,7 @@
     auto check = [this, done = std::make_shared<int>(0)] {
       ++*done;
       if (*done == 2) {
-        Signal(modular::testing::kTestShutdown);
+        Signal(kParentModuleDoneSignal);
       }
     };
 
diff --git a/tests/embed_shell/embed_shell_test_session_shell.cc b/tests/embed_shell/embed_shell_test_session_shell.cc
new file mode 100644
index 0000000..c5a2c4c
--- /dev/null
+++ b/tests/embed_shell/embed_shell_test_session_shell.cc
@@ -0,0 +1,105 @@
+// 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.
+
+#include <fuchsia/modular/cpp/fidl.h>
+#include <fuchsia/sys/cpp/fidl.h>
+#include <lib/async/cpp/task.h>
+#include <lib/component/cpp/startup_context.h>
+#include <lib/fidl/cpp/binding.h>
+#include <lib/fxl/command_line.h>
+#include <lib/fxl/logging.h>
+#include <lib/fxl/macros.h>
+
+#include "peridot/lib/testing/component_main.h"
+#include "peridot/lib/testing/session_shell_base.h"
+#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/embed_shell/defs.h"
+
+using modular::testing::Await;
+using modular::testing::Signal;
+using modular::testing::TestPoint;
+
+namespace {
+
+// Cf. README.md for what this test does in general and how. The test cases are
+// described in detail in comments below.
+class TestApp : public modular::testing::SessionShellBase {
+ public:
+  explicit TestApp(component::StartupContext* const startup_context)
+      : SessionShellBase(startup_context) {
+    TestInit(__FILE__);
+
+    startup_context->ConnectToEnvironmentService(puppet_master_.NewRequest());
+
+    TestParentChild();
+  }
+
+  ~TestApp() override = default;
+
+ private:
+  void TestParentChild() {
+    puppet_master_->ControlStory(kStoryName, story_puppet_master_.NewRequest());
+
+    fuchsia::modular::AddMod add_mod;
+    add_mod.mod_name.push_back("root");
+    add_mod.intent.handler = kParentModuleUrl;
+    add_mod.intent.action = kParentModuleAction;
+    add_mod.intent.parameters =
+        fidl::VectorPtr<fuchsia::modular::IntentParameter>::New(0);
+
+    fuchsia::modular::StoryCommand command;
+    command.set_add_mod(std::move(add_mod));
+
+    std::vector<fuchsia::modular::StoryCommand> commands;
+    commands.push_back(std::move(command));
+    story_puppet_master_->Enqueue(std::move(commands));
+    story_puppet_master_->Execute(
+        [this](fuchsia::modular::ExecuteResult result) {
+          story_provider()->GetController(kStoryName,
+                                          story_controller_.NewRequest());
+          fidl::InterfaceHandle<fuchsia::ui::viewsv1token::ViewOwner>
+              root_module_view;
+          story_controller_->RequestStart();
+        });
+
+    Await(kParentModuleDoneSignal, [this] {
+      story_controller_->Stop([this] { TestModuleReinflation(); });
+    });
+  }
+
+  TestPoint modules_reinflated_correctly_{"Modules reinfated correctly"};
+  // Test that embedded modules are not reinflated.
+  void TestModuleReinflation() {
+    story_controller_->RequestStart();
+    story_controller_->GetActiveModules(
+        [this](std::vector<fuchsia::modular::ModuleData> active_modules) {
+          size_t num_embedded_mods = 0u;
+          for (const fuchsia::modular::ModuleData& mod : active_modules) {
+            num_embedded_mods += mod.is_embedded;
+          }
+          if (num_embedded_mods == 0 && active_modules.size() == 2u) {
+            modules_reinflated_correctly_.Pass();
+          }
+          Await(kParentModuleDoneSignal, [this] { Logout(); });
+        });
+  }
+
+  void Logout() { Signal(modular::testing::kTestShutdown); }
+
+  fuchsia::modular::PuppetMasterPtr puppet_master_;
+  fuchsia::modular::StoryPuppetMasterPtr story_puppet_master_;
+  fuchsia::modular::StoryControllerPtr story_controller_;
+
+  FXL_DISALLOW_COPY_AND_ASSIGN(TestApp);
+};
+
+}  // namespace
+
+int main(int argc, const char** argv) {
+  auto command_line = fxl::CommandLineFromArgcArgv(argc, argv);
+  modular::testing::ComponentMain<TestApp>();
+  return 0;
+}
diff --git a/tests/embed_shell/embed_shell_test_story_shell.cc b/tests/embed_shell/embed_shell_test_story_shell.cc
index 3e6cd4f..98aff2c 100644
--- a/tests/embed_shell/embed_shell_test_story_shell.cc
+++ b/tests/embed_shell/embed_shell_test_story_shell.cc
@@ -46,15 +46,17 @@
   TestPoint add_surface_{"AddSurface root:child:child root"};
 
   // |fuchsia::modular::StoryShell|
-  void AddSurface(
-      fuchsia::modular::ViewConnection view_connection,
-       fuchsia::modular::SurfaceInfo surface_info) override {
-    FXL_LOG(INFO) << "surface_id=" << view_connection.surface_id << ", anchor_id=" << surface_info.parent_id;
-    if (view_connection.surface_id == "root:child:child" && surface_info.parent_id == "root") {
+  void AddSurface(fuchsia::modular::ViewConnection view_connection,
+                  fuchsia::modular::SurfaceInfo surface_info) override {
+    FXL_LOG(INFO) << "surface_id=" << view_connection.surface_id
+                  << ", anchor_id=" << surface_info.parent_id;
+    if (view_connection.surface_id == "root:child:child" &&
+        surface_info.parent_id == "root") {
       add_surface_.Pass();
       modular::testing::GetStore()->Put("story_shell_done", "1", [] {});
     } else {
-      FXL_LOG(WARNING) << "AddView " << view_connection.surface_id << " anchor " << surface_info.parent_id;
+      FXL_LOG(WARNING) << "AddView " << view_connection.surface_id << " anchor "
+                       << surface_info.parent_id;
     }
   }
 
@@ -63,7 +65,7 @@
 
   // |fuchsia::modular::StoryShell|
   void DefocusSurface(std::string /*surface_id*/,
-                   DefocusSurfaceCallback callback) override {
+                      DefocusSurfaceCallback callback) override {
     callback();
   }
 
@@ -72,19 +74,19 @@
       std::string /*container_name*/, fidl::StringPtr /*parent_id*/,
       fuchsia::modular::SurfaceRelation /*relation*/,
       std::vector<fuchsia::modular::ContainerLayout> /*layout*/,
-      std::vector<
-          fuchsia::modular::ContainerRelationEntry> /* relationships */,
+      std::vector<fuchsia::modular::ContainerRelationEntry> /* relationships */,
       std::vector<fuchsia::modular::ContainerView> /* views */) override {}
 
   // |fuchsia::modular::StoryShell|
   void RemoveSurface(std::string /*surface_id*/) override {}
 
   // |fuchsia::modular::StoryShell|
-  void ReconnectView(fuchsia::modular::ViewConnection view_connection) override {}
+  void ReconnectView(
+      fuchsia::modular::ViewConnection view_connection) override {}
 
   // |fuchsia::modular::StoryShell|
   void UpdateSurface(fuchsia::modular::ViewConnection view_connection,
-        fuchsia::modular::SurfaceInfo /*surface_info*/) override {};
+                     fuchsia::modular::SurfaceInfo /*surface_info*/) override{};
 
   fuchsia::modular::StoryShellContextPtr story_shell_context_;
 
diff --git a/tests/embed_shell/meta/embed_shell_test_session_shell.cmx b/tests/embed_shell/meta/embed_shell_test_session_shell.cmx
new file mode 100644
index 0000000..495da50
--- /dev/null
+++ b/tests/embed_shell/meta/embed_shell_test_session_shell.cmx
@@ -0,0 +1,25 @@
+{
+    "program": {
+        "binary": "bin/app"
+    },
+    "sandbox": {
+        "services": [
+            "fuchsia.cobalt.LoggerFactory",
+            "fuchsia.modular.ComponentContext",
+            "fuchsia.modular.ModuleContext",
+            "fuchsia.modular.PuppetMaster",
+            "fuchsia.modular.SessionShellContext",
+            "fuchsia.net.LegacySocketProvider",
+            "fuchsia.sys.Environment",
+            "fuchsia.sys.Launcher",
+            "fuchsia.sys.Loader",
+            "fuchsia.testing.runner.TestRunner",
+            "fuchsia.testing.runner.TestRunnerStore",
+            "fuchsia.tracelink.Registry",
+            "fuchsia.ui.policy.Presenter",
+            "fuchsia.ui.scenic.Scenic",
+            "fuchsia.ui.viewsv1.ViewManager",
+            "fuchsia.ui.viewsv1.ViewSnapshot"
+        ]
+    }
+}
diff --git a/tests/modular_tests.json b/tests/modular_tests.json
index 38279cb..055a281 100644
--- a/tests/modular_tests.json
+++ b/tests/modular_tests.json
@@ -34,8 +34,7 @@
         "--test",
         "--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/dev_session_shell#meta/dev_session_shell.cmx",
-        "--session_shell_args=--root_module=fuchsia-pkg://fuchsia.com/embed_shell_test_parent_module#meta/embed_shell_test_parent_module.cmx",
+        "--session_shell=fuchsia-pkg://fuchsia.com/embed_shell_test_session_shell#meta/embed_shell_test_session_shell.cmx",
         "--story_shell=fuchsia-pkg://fuchsia.com/embed_shell_test_story_shell#meta/embed_shell_test_story_shell.cmx",
         "--sessionmgr_args=--use_memfs_for_ledger"
       ]
diff --git a/tests/module_context/README.md b/tests/module_context/README.md
index 7909dd5..2eb14bb 100644
--- a/tests/module_context/README.md
+++ b/tests/module_context/README.md
@@ -3,8 +3,7 @@
 Tests that calls to ModuleContext.RemoveSelfFromStory() are handled correctly by the framework.
 
 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 session shell then signals the second module, and verifies that the story is
-stopped as well.
-
-
+first module to call ModuleContext.RemoveSelfFromStory and verifies that the
+module is stopped. The session shell then signals the second module to
+ModuleContext.RemoveSelfFromStory, and verifies that the story is stopped as
+well.
\ No newline at end of file
