diff --git a/examples/apptest/example_service_application.cc b/examples/apptest/example_service_application.cc
index f358173..578bf59 100644
--- a/examples/apptest/example_service_application.cc
+++ b/examples/apptest/example_service_application.cc
@@ -4,10 +4,8 @@
 
 #include "examples/apptest/example_service_application.h"
 
-#include <memory>
-
 #include "mojo/public/c/system/main.h"
-#include "mojo/public/cpp/application/application_runner.h"
+#include "mojo/public/cpp/application/run_application.h"
 #include "mojo/public/cpp/application/service_provider_impl.h"
 
 namespace mojo {
@@ -16,7 +14,7 @@
 
 ExampleServiceApplication::~ExampleServiceApplication() {}
 
-bool ExampleServiceApplication::ConfigureIncomingConnection(
+bool ExampleServiceApplication::OnAcceptConnection(
     ServiceProviderImpl* service_provider_impl) {
   service_provider_impl->AddService<ExampleService>(
       [](const ConnectionContext& connection_context,
@@ -30,8 +28,7 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(
-      std::unique_ptr<mojo::ExampleServiceApplication>(
-          new mojo::ExampleServiceApplication()));
-  return runner.Run(application_request);
+  mojo::ExampleServiceApplication example_service_application;
+  return mojo::RunMainApplication(application_request,
+                                  &example_service_application);
 }
diff --git a/examples/apptest/example_service_application.h b/examples/apptest/example_service_application.h
index bb22514..7947b00 100644
--- a/examples/apptest/example_service_application.h
+++ b/examples/apptest/example_service_application.h
@@ -6,20 +6,19 @@
 #define MOJO_EXAMPLES_TEST_EXAMPLE_SERVICE_APPLICATION_H_
 
 #include "examples/apptest/example_service_impl.h"
-#include "mojo/public/cpp/application/application_delegate.h"
+#include "mojo/public/cpp/application/application_impl_base.h"
 #include "mojo/public/cpp/system/macros.h"
 
 namespace mojo {
 
-class ExampleServiceApplication : public ApplicationDelegate {
+class ExampleServiceApplication : public ApplicationImplBase {
  public:
   ExampleServiceApplication();
   ~ExampleServiceApplication() override;
 
  private:
-  // ApplicationDelegate implementation.
-  bool ConfigureIncomingConnection(
-      ServiceProviderImpl* service_provider_impl) override;
+  // ApplicationImplBase override.
+  bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override;
 
   MOJO_DISALLOW_COPY_AND_ASSIGN(ExampleServiceApplication);
 };
diff --git a/examples/audio_play_test/play_tone.cc b/examples/audio_play_test/play_tone.cc
index 025bdbb..ccbab46 100644
--- a/examples/audio_play_test/play_tone.cc
+++ b/examples/audio_play_test/play_tone.cc
@@ -6,10 +6,9 @@
 #include <memory>
 
 #include "mojo/public/c/system/main.h"
-#include "mojo/public/cpp/application/application_delegate.h"
-#include "mojo/public/cpp/application/application_impl.h"
-#include "mojo/public/cpp/application/application_runner.h"
+#include "mojo/public/cpp/application/application_impl_base.h"
 #include "mojo/public/cpp/application/connect.h"
+#include "mojo/public/cpp/application/run_application.h"
 #include "mojo/public/cpp/utility/run_loop.h"
 #include "mojo/services/media/audio/interfaces/audio_server.mojom.h"
 #include "mojo/services/media/audio/interfaces/audio_track.mojom.h"
@@ -36,13 +35,13 @@
   return ((usec * SAMP_FREQ) / 1000000) * FRAME_BYTES;
 }
 
-class PlayToneApp : public ApplicationDelegate {
+class PlayToneApp : public ApplicationImplBase {
  public:
-  ~PlayToneApp() override { Quit(); }
+  ~PlayToneApp() override { OnQuit(); }
 
-  // ApplicationDelegate
-  void Initialize(ApplicationImpl* app) override;
-  void Quit() override;
+  // ApplicationImplBase overrides:
+  void OnInitialize() override;
+  void OnQuit() override;
 
  private:
   void GenerateToneCbk(MediaResult res);
@@ -63,15 +62,15 @@
   bool     shutting_down_ = false;
 };
 
-void PlayToneApp::Quit() {
+void PlayToneApp::OnQuit() {
   timeline_consumer_.reset();
   audio_pipe_.reset();
   audio_track_.reset();
   audio_server_.reset();
 }
 
-void PlayToneApp::Initialize(ApplicationImpl* app) {
-  mojo::ConnectToService(app->shell(), "mojo:audio_server",
+void PlayToneApp::OnInitialize() {
+  mojo::ConnectToService(shell(), "mojo:audio_server",
                          GetProxy(&audio_server_));
   audio_server_.set_connection_error_handler([this]() {
     OnConnectionError("audio_server");
@@ -233,7 +232,7 @@
 }
 
 void PlayToneApp::Shutdown() {
-  Quit();
+  OnQuit();
   RunLoop::current()->Quit();
 }
 
@@ -243,8 +242,6 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle app_request) {
-  mojo::ApplicationRunner runner(
-      std::unique_ptr<mojo::media::audio::examples::PlayToneApp>(
-          new mojo::media::audio::examples::PlayToneApp()));
-  return runner.Run(app_request);
+  mojo::media::audio::examples::PlayToneApp play_tone_app;
+  return mojo::RunMainApplication(app_request, &play_tone_app);
 }
diff --git a/examples/audio_play_test/play_wav.cc b/examples/audio_play_test/play_wav.cc
index f5f11ea..a05fe26 100644
--- a/examples/audio_play_test/play_wav.cc
+++ b/examples/audio_play_test/play_wav.cc
@@ -5,10 +5,9 @@
 #include <memory>
 
 #include "mojo/public/c/system/main.h"
-#include "mojo/public/cpp/application/application_delegate.h"
-#include "mojo/public/cpp/application/application_impl.h"
-#include "mojo/public/cpp/application/application_runner.h"
+#include "mojo/public/cpp/application/application_impl_base.h"
 #include "mojo/public/cpp/application/connect.h"
+#include "mojo/public/cpp/application/run_application.h"
 #include "mojo/public/cpp/system/data_pipe.h"
 #include "mojo/public/cpp/system/wait.h"
 #include "mojo/public/cpp/utility/run_loop.h"
@@ -49,13 +48,13 @@
 static constexpr uint32_t BUF_HI_WATER_USEC = 450000;
 static constexpr uint32_t CHUNK_SIZE_USEC   = 10000;
 
-class PlayWAVApp : public ApplicationDelegate {
+class PlayWAVApp : public ApplicationImplBase {
  public:
-  ~PlayWAVApp() override { Quit(); }
+  ~PlayWAVApp() override { OnQuit(); }
 
-  // ApplicationDelegate
-  void Initialize(ApplicationImpl* app) override;
-  void Quit() override;
+  // ApplicationImplBase overrides:
+  void OnInitialize() override;
+  void OnQuit() override;
 
  private:
   using AudioPipePtr = std::unique_ptr<CircularBufferMediaPipeAdapter>;
@@ -157,13 +156,13 @@
   8, 16,
 });
 
-void PlayWAVApp::Initialize(ApplicationImpl* app) {
-  ConnectToService(app->shell(), "mojo:audio_server", GetProxy(&audio_server_));
+void PlayWAVApp::OnInitialize() {
+  ConnectToService(shell(), "mojo:audio_server", GetProxy(&audio_server_));
   audio_server_.set_connection_error_handler([this]() {
     OnConnectionError("audio_server");
   });
 
-  ConnectToService(app->shell(), "mojo:network_service",
+  ConnectToService(shell(), "mojo:network_service",
                    GetProxy(&network_service_));
   audio_server_.set_connection_error_handler([this]() {
     OnConnectionError("network_service");
@@ -186,7 +185,7 @@
   url_loader_->Start(req.Pass(), URLLoader::StartCallback(cbk));
 }
 
-void PlayWAVApp::Quit() {
+void PlayWAVApp::OnQuit() {
   if (audio_packet_.packet()) {
     MOJO_DCHECK(audio_pipe_);
     audio_pipe_->CancelMediaPacket(&audio_packet_);
@@ -547,7 +546,7 @@
 // pattern for shutting down an app has been established, come back here and
 // remove all this junk.
 void PlayWAVApp::Shutdown() {
-  Quit();
+  OnQuit();
   RunLoop::current()->Quit();
 }
 
@@ -557,8 +556,6 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle app_request) {
-  mojo::ApplicationRunner runner(
-      std::unique_ptr<mojo::media::audio::examples::PlayWAVApp>(
-          new mojo::media::audio::examples::PlayWAVApp()));
-  return runner.Run(app_request);
+  mojo::media::audio::examples::PlayWAVApp play_wav_app;
+  return mojo::RunMainApplication(app_request, &play_wav_app);
 }
diff --git a/examples/authentication_demo/google_authentication_demo.cc b/examples/authentication_demo/google_authentication_demo.cc
index 79a79d0..8b5bf06 100644
--- a/examples/authentication_demo/google_authentication_demo.cc
+++ b/examples/authentication_demo/google_authentication_demo.cc
@@ -5,25 +5,24 @@
 #include "base/bind.h"
 #include "base/logging.h"
 #include "mojo/public/c/system/main.h"
-#include "mojo/public/cpp/application/application_delegate.h"
-#include "mojo/public/cpp/application/application_impl.h"
-#include "mojo/public/cpp/application/application_runner.h"
+#include "mojo/public/cpp/application/application_impl_base.h"
 #include "mojo/public/cpp/application/connect.h"
+#include "mojo/public/cpp/application/run_application.h"
 #include "mojo/public/cpp/utility/run_loop.h"
 #include "mojo/services/authentication/interfaces/authentication.mojom.h"
 
 namespace examples {
 namespace authentication {
 
-class GoogleAuthApp : public mojo::ApplicationDelegate {
+class GoogleAuthApp : public mojo::ApplicationImplBase {
  public:
   GoogleAuthApp() {}
 
   ~GoogleAuthApp() override {}
 
-  void Initialize(mojo::ApplicationImpl* app) override {
+  void OnInitialize() override {
     DLOG(INFO) << "Connecting to authentication service...";
-    mojo::ConnectToService(app->shell(), "mojo:authentication",
+    mojo::ConnectToService(shell(), "mojo:authentication",
                            GetProxy(&authentication_service_));
 
     mojo::Array<mojo::String> scopes;
@@ -128,8 +127,6 @@
 }  // namespace examples
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(
-      std::unique_ptr<examples::authentication::GoogleAuthApp>(
-          new examples::authentication::GoogleAuthApp()));
-  return runner.Run(application_request);
+  examples::authentication::GoogleAuthApp google_auth_app;
+  return mojo::RunMainApplication(application_request, &google_auth_app);
 }
diff --git a/examples/hello_mojo/hello_mojo_client.cc b/examples/hello_mojo/hello_mojo_client.cc
index 402174d..c0305a2 100644
--- a/examples/hello_mojo/hello_mojo_client.cc
+++ b/examples/hello_mojo/hello_mojo_client.cc
@@ -4,15 +4,13 @@
 
 #include <stdio.h>
 
-#include <memory>
 #include <string>
 
 #include "examples/hello_mojo/hello_mojo.mojom.h"
 #include "mojo/public/c/system/main.h"
-#include "mojo/public/cpp/application/application_delegate.h"
-#include "mojo/public/cpp/application/application_impl.h"
-#include "mojo/public/cpp/application/application_runner.h"
+#include "mojo/public/cpp/application/application_impl_base.h"
 #include "mojo/public/cpp/application/connect.h"
+#include "mojo/public/cpp/application/run_application.h"
 #include "mojo/public/cpp/system/macros.h"
 #include "mojo/public/cpp/utility/run_loop.h"
 
@@ -20,13 +18,13 @@
 
 namespace {
 
-class HelloMojoClientApp : public mojo::ApplicationDelegate {
+class HelloMojoClientApp : public mojo::ApplicationImplBase {
  public:
   HelloMojoClientApp() {}
   ~HelloMojoClientApp() override {}
 
-  void Initialize(mojo::ApplicationImpl* application) override {
-    mojo::ConnectToService(application->shell(), "mojo:hello_mojo_server",
+  void OnInitialize() override {
+    mojo::ConnectToService(shell(), "mojo:hello_mojo_server",
                            GetProxy(&hello_mojo_));
 
     DoIt("hello");
@@ -48,7 +46,6 @@
 }  // namespace
 
 MojoResult MojoMain(MojoHandle application_request) {
-  return mojo::ApplicationRunner(std::unique_ptr<mojo::ApplicationDelegate>(
-                                     new HelloMojoClientApp()))
-      .Run(application_request);
+  HelloMojoClientApp hello_mojo_client_app;
+  return mojo::RunMainApplication(application_request, &hello_mojo_client_app);
 }
diff --git a/examples/hello_mojo/hello_mojo_server.cc b/examples/hello_mojo/hello_mojo_server.cc
index 6ad9a52..2cde005 100644
--- a/examples/hello_mojo/hello_mojo_server.cc
+++ b/examples/hello_mojo/hello_mojo_server.cc
@@ -2,14 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <memory>
 #include <string>
 #include <utility>
 
 #include "examples/hello_mojo/hello_mojo.mojom.h"
 #include "mojo/public/c/system/main.h"
-#include "mojo/public/cpp/application/application_delegate.h"
-#include "mojo/public/cpp/application/application_runner.h"
+#include "mojo/public/cpp/application/application_impl_base.h"
+#include "mojo/public/cpp/application/run_application.h"
 #include "mojo/public/cpp/application/service_provider_impl.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
@@ -37,13 +36,13 @@
   MOJO_DISALLOW_COPY_AND_ASSIGN(HelloMojoImpl);
 };
 
-class HelloMojoServerApp : public mojo::ApplicationDelegate {
+class HelloMojoServerApp : public mojo::ApplicationImplBase {
  public:
   HelloMojoServerApp() {}
   ~HelloMojoServerApp() override {}
 
-  // |mojo::ApplicationDelegate| implementation:
-  bool ConfigureIncomingConnection(
+  // |mojo::ApplicationImplBase| override:
+  bool OnAcceptConnection(
       mojo::ServiceProviderImpl* service_provider_impl) override {
     service_provider_impl->AddService<HelloMojo>(
         [](const mojo::ConnectionContext& connection_context,
@@ -60,7 +59,6 @@
 }  // namespace
 
 MojoResult MojoMain(MojoHandle application_request) {
-  return mojo::ApplicationRunner(std::unique_ptr<mojo::ApplicationDelegate>(
-                                     new HelloMojoServerApp()))
-      .Run(application_request);
+  HelloMojoServerApp hello_mojo_server_app;
+  return mojo::RunMainApplication(application_request, &hello_mojo_server_app);
 }
diff --git a/examples/media_test/media_test.cc b/examples/media_test/media_test.cc
index 5d76004..d8f0858 100644
--- a/examples/media_test/media_test.cc
+++ b/examples/media_test/media_test.cc
@@ -14,15 +14,14 @@
 
 // static
 std::unique_ptr<MediaTest> MediaTest::Create(
-    mojo::ApplicationImpl* app,
+    mojo::Shell* shell,
     const std::string& input_file_name) {
-  return std::unique_ptr<MediaTest>(new MediaTest(app, input_file_name));
+  return std::unique_ptr<MediaTest>(new MediaTest(shell, input_file_name));
 }
 
-MediaTest::MediaTest(mojo::ApplicationImpl* app,
-                     const std::string& input_file_name) {
+MediaTest::MediaTest(mojo::Shell* shell, const std::string& input_file_name) {
   MediaFactoryPtr factory;
-  ConnectToService(app->shell(), "mojo:media_factory", GetProxy(&factory));
+  ConnectToService(shell, "mojo:media_factory", GetProxy(&factory));
 
   SeekingReaderPtr reader;
   factory->CreateNetworkReader(input_file_name, GetProxy(&reader));
diff --git a/examples/media_test/media_test.h b/examples/media_test/media_test.h
index ca16de2..57f76d0 100644
--- a/examples/media_test/media_test.h
+++ b/examples/media_test/media_test.h
@@ -6,12 +6,14 @@
 #define EXAMPLES_MEDIA_TEST_MEDIA_TEST_H_
 
 #include "base/macros.h"
-#include "mojo/public/cpp/application/application_impl.h"
 #include "mojo/services/media/common/cpp/timeline_function.h"
 #include "mojo/services/media/control/interfaces/media_factory.mojom.h"
 #include "mojo/services/media/control/interfaces/media_player.mojom.h"
 
 namespace mojo {
+
+class Shell;
+
 namespace media {
 namespace examples {
 
@@ -22,7 +24,7 @@
 
   using UpdateCallback = std::function<void()>;
 
-  static std::unique_ptr<MediaTest> Create(mojo::ApplicationImpl* app,
+  static std::unique_ptr<MediaTest> Create(mojo::Shell* shell,
                                            const std::string& input_file_name);
 
   ~MediaTest();
@@ -54,7 +56,7 @@
   const MediaMetadataPtr& metadata() const;
 
  private:
-  MediaTest(mojo::ApplicationImpl* app, const std::string& input_file_name);
+  MediaTest(mojo::Shell* shell, const std::string& input_file_name);
 
   // Handles a status update from the player. When called with the default
   // argument values, initiates status updates.
diff --git a/examples/media_test/media_test_app.cc b/examples/media_test/media_test_app.cc
index ff4ba3d..3ce8e8a 100644
--- a/examples/media_test/media_test_app.cc
+++ b/examples/media_test/media_test_app.cc
@@ -7,27 +7,26 @@
 #include <iostream>
 
 #include "base/bind.h"
+#include "base/message_loop/message_loop.h"
 #include "examples/media_test/keystroke.h"
 #include "examples/media_test/media_test.h"
-#include "mojo/application/application_runner_chromium.h"
 #include "mojo/public/c/system/main.h"
-#include "mojo/public/cpp/application/application_delegate.h"
-#include "mojo/public/cpp/application/application_impl.h"
+#include "mojo/public/cpp/application/application_impl_base.h"
+#include "mojo/public/cpp/application/run_application.h"
 
 namespace mojo {
 namespace media {
 namespace examples {
 
-class MediaTestApp : public mojo::ApplicationDelegate {
+class MediaTestApp : public mojo::ApplicationImplBase {
  public:
   MediaTestApp() {}
 
   ~MediaTestApp() override {}
 
-  // ApplicationDelegate implementation.
-  void Initialize(mojo::ApplicationImpl* app) override {
-    app_ = app;
-    ProcessArgs(app->args());
+  // ApplicationImplBase overrides.
+  void OnInitialize() override {
+    ProcessArgs(args());
 
     std::cout << std::endl << "MEDIA TEST" << std::endl << std::endl;
 
@@ -95,7 +94,7 @@
   // input_file_names_iter_.
   void CreateNewMediaTest() {
     MOJO_DCHECK(input_file_names_iter_ != input_file_names_.end());
-    media_test_ = MediaTest::Create(app_, *input_file_names_iter_);
+    media_test_ = MediaTest::Create(shell(), *input_file_names_iter_);
 
     metadata_shown_ = false;
     media_test_->RegisterUpdateCallback(
@@ -294,7 +293,6 @@
 
   const char* clear_line() const { return paint_ ? kClearLine : ""; }
 
-  mojo::ApplicationImpl* app_;
   std::unique_ptr<MediaTest> media_test_;
   std::deque<std::string> input_file_names_;
   decltype(input_file_names_.begin()) input_file_names_iter_;
@@ -315,7 +313,6 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunnerChromium runner(
-      new mojo::media::examples::MediaTestApp);
-  return runner.Run(application_request);
+  mojo::media::examples::MediaTestApp media_test_app;
+  return mojo::RunMainApplication(application_request, &media_test_app);
 }
diff --git a/examples/native_run_app/native_run_app.cc b/examples/native_run_app/native_run_app.cc
index 1841ed8..090ba7e 100644
--- a/examples/native_run_app/native_run_app.cc
+++ b/examples/native_run_app/native_run_app.cc
@@ -22,11 +22,11 @@
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/strings/string_split.h"
-#include "mojo/application/application_runner_chromium.h"
 #include "mojo/public/c/system/main.h"
 #include "mojo/public/cpp/application/application_delegate.h"
-#include "mojo/public/cpp/application/application_impl.h"
+#include "mojo/public/cpp/application/application_impl_base.h"
 #include "mojo/public/cpp/application/connect.h"
+#include "mojo/public/cpp/application/run_application.h"
 #include "mojo/public/cpp/application/service_provider_impl.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
@@ -220,21 +220,19 @@
   DISALLOW_COPY_AND_ASSIGN(TerminalClientImpl);
 };
 
-class NativeRunApp : public mojo::ApplicationDelegate {
+class NativeRunApp : public mojo::ApplicationImplBase {
  public:
-  NativeRunApp() : application_impl_(nullptr) {}
+  NativeRunApp() {}
   ~NativeRunApp() override {}
 
  private:
-  // |mojo::ApplicationDelegate|:
-  void Initialize(mojo::ApplicationImpl* application_impl) override {
-    DCHECK(!application_impl_);
-    application_impl_ = application_impl;
-    mojo::ConnectToService(application_impl_->shell(), "mojo:native_support",
+  // |mojo::ApplicationImplBase| overrides:
+  void OnInitialize() override {
+    mojo::ConnectToService(shell(), "mojo:native_support",
                            GetProxy(&native_support_process_));
   }
 
-  bool ConfigureIncomingConnection(
+  bool OnAcceptConnection(
       mojo::ServiceProviderImpl* service_provider_impl) override {
     service_provider_impl->AddService<TerminalClient>(
         [this](const mojo::ConnectionContext& connection_context,
@@ -245,13 +243,12 @@
     return true;
   }
 
-  mojo::ApplicationImpl* application_impl_;
   native_support::ProcessPtr native_support_process_;
 
   DISALLOW_COPY_AND_ASSIGN(NativeRunApp);
 };
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunnerChromium runner(new NativeRunApp());
-  return runner.Run(application_request);
+  NativeRunApp native_run_app;
+  return mojo::RunMainApplication(application_request, &native_run_app);
 }
diff --git a/examples/wget/wget.cc b/examples/wget/wget.cc
index 156eeb9..d333093 100644
--- a/examples/wget/wget.cc
+++ b/examples/wget/wget.cc
@@ -4,13 +4,10 @@
 
 #include <stdio.h>
 
-#include <memory>
-
 #include "mojo/public/c/system/main.h"
-#include "mojo/public/cpp/application/application_delegate.h"
-#include "mojo/public/cpp/application/application_impl.h"
-#include "mojo/public/cpp/application/application_runner.h"
+#include "mojo/public/cpp/application/application_impl_base.h"
 #include "mojo/public/cpp/application/connect.h"
+#include "mojo/public/cpp/application/run_application.h"
 #include "mojo/public/cpp/system/wait.h"
 #include "mojo/public/cpp/utility/run_loop.h"
 #include "mojo/services/network/interfaces/network_service.mojom.h"
@@ -75,12 +72,12 @@
 
 }  // namespace
 
-class WGetApp : public ApplicationDelegate {
+class WGetApp : public ApplicationImplBase {
  public:
-  void Initialize(ApplicationImpl* app) override {
-    ConnectToService(app->shell(), "mojo:network_service",
+  void OnInitialize() override {
+    ConnectToService(shell(), "mojo:network_service",
                      GetProxy(&network_service_));
-    Start(app->args());
+    Start(args());
   }
 
  private:
@@ -114,7 +111,6 @@
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunner runner(
-      std::unique_ptr<mojo::examples::WGetApp>(new mojo::examples::WGetApp()));
-  return runner.Run(application_request);
+  mojo::examples::WGetApp wget_app;
+  return mojo::RunMainApplication(application_request, &wget_app);
 }
diff --git a/mojo/application/BUILD.gn b/mojo/application/BUILD.gn
index f697dde..e8f7b21 100644
--- a/mojo/application/BUILD.gn
+++ b/mojo/application/BUILD.gn
@@ -7,6 +7,7 @@
     "application_runner_chromium.cc",
     "application_runner_chromium.h",
     "run_application.cc",
+    "run_application_options_chromium.h",
   ]
 
   public_deps = [
diff --git a/mojo/application/run_application.cc b/mojo/application/run_application.cc
index 5a67621..d06feb9 100644
--- a/mojo/application/run_application.cc
+++ b/mojo/application/run_application.cc
@@ -12,6 +12,7 @@
 #include "base/message_loop/message_loop.h"
 #include "base/threading/thread_local_storage.h"
 #include "build/build_config.h"
+#include "mojo/application/run_application_options_chromium.h"
 #include "mojo/message_pump/message_pump_mojo.h"
 #include "mojo/public/cpp/application/application_impl_base.h"
 #include "mojo/public/cpp/system/message_pipe.h"
@@ -38,7 +39,8 @@
 }  // namespace
 
 MojoResult RunMainApplication(MojoHandle application_request_handle,
-                              ApplicationImplBase* application_impl) {
+                              ApplicationImplBase* application_impl,
+                              const RunApplicationOptions* options) {
   base::CommandLine::Init(0, nullptr);
   base::AtExitManager at_exit;
 
@@ -48,20 +50,28 @@
   base::debug::EnableInProcessStackDumping();
 #endif
 
-  return RunApplication(application_request_handle, application_impl);
+  return RunApplication(application_request_handle, application_impl, options);
 }
 
 MojoResult RunApplication(MojoHandle application_request_handle,
-                          ApplicationImplBase* application_impl) {
+                          ApplicationImplBase* application_impl,
+                          const RunApplicationOptions* options) {
   DCHECK(!g_current_result_holder.Get());
 
   ResultHolder result_holder;
   g_current_result_holder.Set(&result_holder);
 
-  std::unique_ptr<base::MessageLoop> loop;
-  // TODO(vtl): Support other types of message loops. (That's why I'm leaving
-  // |loop| as a unique_ptr.)
-  loop.reset(new base::MessageLoop(common::MessagePumpMojo::Create()));
+  // Note: If |options| is non-null, it better point to a
+  // |RunApplicationOptionsChromium|.
+  base::MessageLoop::Type message_loop_type =
+      options
+          ? static_cast<const RunApplicationOptionsChromium*>(options)
+                ->message_loop_type
+          : base::MessageLoop::TYPE_CUSTOM;
+  std::unique_ptr<base::MessageLoop> loop(
+      (message_loop_type == base::MessageLoop::TYPE_CUSTOM)
+          ? new base::MessageLoop(common::MessagePumpMojo::Create())
+          : new base::MessageLoop(message_loop_type));
   application_impl->Bind(InterfaceRequest<Application>(
       MakeScopedHandle(MessagePipeHandle(application_request_handle))));
   loop->Run();
diff --git a/mojo/application/run_application_options_chromium.h b/mojo/application/run_application_options_chromium.h
new file mode 100644
index 0000000..54a5578
--- /dev/null
+++ b/mojo/application/run_application_options_chromium.h
@@ -0,0 +1,27 @@
+// Copyright 2016 The Chromium 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 MOJO_APPLICATION_RUN_APPLICATION_OPTIONS_CHROMIUM_H_
+#define MOJO_APPLICATION_RUN_APPLICATION_OPTIONS_CHROMIUM_H_
+
+#include "base/message_loop/message_loop.h"
+#include "mojo/public/cpp/application/run_application.h"
+
+namespace mojo {
+
+// Options for the "chromium" implementation of |RunMainApplication()| and
+// |RunApplication()|.
+class RunApplicationOptionsChromium : public RunApplicationOptions {
+ public:
+  explicit RunApplicationOptionsChromium(
+      base::MessageLoop::Type message_loop_type)
+      : message_loop_type(message_loop_type) {}
+  ~RunApplicationOptionsChromium() {}
+
+  base::MessageLoop::Type message_loop_type;
+};
+
+}  // namespace mojo
+
+#endif  // MOJO_APPLICATION_RUN_APPLICATION_OPTIONS_CHROMIUM_H_
diff --git a/mojo/public/cpp/application/lib/run_application.cc b/mojo/public/cpp/application/lib/run_application.cc
index e34d245..570736a 100644
--- a/mojo/public/cpp/application/lib/run_application.cc
+++ b/mojo/public/cpp/application/lib/run_application.cc
@@ -61,12 +61,15 @@
 }  // namespace
 
 MojoResult RunMainApplication(MojoHandle application_request_handle,
-                              ApplicationImplBase* application_impl) {
-  return RunApplication(application_request_handle, application_impl);
+                              ApplicationImplBase* application_impl,
+                              const RunApplicationOptions* options) {
+  return RunApplication(application_request_handle, application_impl, options);
 }
 
 MojoResult RunApplication(MojoHandle application_request_handle,
-                          ApplicationImplBase* application_impl) {
+                          ApplicationImplBase* application_impl,
+                          const RunApplicationOptions* options) {
+  assert(!options);  // No options supported!
   assert(!GetCurrentResultHolder());
 
   ResultHolder result_holder;
diff --git a/mojo/public/cpp/application/run_application.h b/mojo/public/cpp/application/run_application.h
index 3f323d9..d22de41 100644
--- a/mojo/public/cpp/application/run_application.h
+++ b/mojo/public/cpp/application/run_application.h
@@ -12,6 +12,17 @@
 
 class ApplicationImplBase;
 
+// Base class for options to |RunMainApplication()| and |RunApplication()|. An
+// implementation of these functions may (but need not, in which case no options
+// are available) separately provide an implementation subclass, which would be
+// specific to that implementation. (The "standalone" implementation has no
+// options.)
+class RunApplicationOptions {
+ protected:
+  RunApplicationOptions() {}
+  ~RunApplicationOptions() {}
+};
+
 // |RunMainApplication()| and |RunApplication()| set up a message (run) loop and
 // run the provided application implementation. |RunMainApplication()| should be
 // used on the application's main thread (e.g., from |MojoMain()|) and may do
@@ -31,11 +42,15 @@
 // running a message loop of some sort).
 //
 // |*application_impl| must remain alive until the message loop starts running
-// (thus it may own itself).
+// (thus it may own itself). If |options| is non-null, then it must point to an
+// instance of an implementation-specific subclass of |RunApplicationOptions|;
+// |*options| must remain alive for the duration of the call.
 MojoResult RunMainApplication(MojoHandle application_request_handle,
-                              ApplicationImplBase* application_impl);
+                              ApplicationImplBase* application_impl,
+                              const RunApplicationOptions* options = nullptr);
 MojoResult RunApplication(MojoHandle application_request_handle,
-                          ApplicationImplBase* application_impl);
+                          ApplicationImplBase* application_impl,
+                          const RunApplicationOptions* options = nullptr);
 
 // |TerminateMainApplication()| and |TerminateApplication()| terminate the
 // application that is running on the current thread. They may only be called
diff --git a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.cc b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.cc
index e936ae5..a67a566 100644
--- a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.cc
+++ b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.cc
@@ -4,7 +4,7 @@
 
 #include "services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.h"
 
-#include "mojo/public/cpp/application/application_impl.h"
+#include "mojo/public/cpp/application/service_provider_impl.h"
 #include "services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.h"
 
 namespace mojo {
@@ -13,14 +13,9 @@
 }
 
 AuthenticatingURLLoaderInterceptorApp::
-    ~AuthenticatingURLLoaderInterceptorApp() {
-}
+    ~AuthenticatingURLLoaderInterceptorApp() {}
 
-void AuthenticatingURLLoaderInterceptorApp::Initialize(ApplicationImpl* app) {
-  app_ = app;
-}
-
-bool AuthenticatingURLLoaderInterceptorApp::ConfigureIncomingConnection(
+bool AuthenticatingURLLoaderInterceptorApp::OnAcceptConnection(
     ServiceProviderImpl* service_provider_impl) {
   service_provider_impl->AddService<
       AuthenticatingURLLoaderInterceptorMetaFactory>([this](
@@ -31,8 +26,8 @@
     if (app_url.is_valid()) {
       app_origin = app_url.GetOrigin();
     }
-    new AuthenticatingURLLoaderInterceptorMetaFactoryImpl(request.Pass(), app_,
-                                                          &tokens_[app_origin]);
+    new AuthenticatingURLLoaderInterceptorMetaFactoryImpl(
+        request.Pass(), shell(), &tokens_[app_origin]);
   });
   return true;
 }
diff --git a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.h b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.h
index 8af5c34..bfa0a0e 100644
--- a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.h
+++ b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.h
@@ -6,25 +6,21 @@
 #define SERVICES_AUTHENTICATING_URL_LOADER_INTERCEPTOR_AUTHENTICATING_URL_LOADER_INTERCEPTOR_APP_H_
 
 #include "base/macros.h"
-#include "mojo/public/cpp/application/application_delegate.h"
-#include "mojo/public/cpp/application/service_provider_impl.h"
+#include "mojo/public/cpp/application/application_impl_base.h"
 #include "mojo/services/authenticating_url_loader_interceptor/interfaces/authenticating_url_loader_interceptor_meta_factory.mojom.h"
 #include "services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.h"
 
 namespace mojo {
 
-class AuthenticatingURLLoaderInterceptorApp : public ApplicationDelegate {
+class AuthenticatingURLLoaderInterceptorApp : public ApplicationImplBase {
  public:
   AuthenticatingURLLoaderInterceptorApp();
   ~AuthenticatingURLLoaderInterceptorApp() override;
 
  private:
-  // ApplicationDelegate
-  void Initialize(ApplicationImpl* app) override;
-  bool ConfigureIncomingConnection(
-      ServiceProviderImpl* service_provider_impl) override;
+  // ApplicationImplBase override:
+  bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override;
 
-  ApplicationImpl* app_;
   // Cache received tokens per origin of the connecting app and origin of the
   // loaded URL so that once a token has been requested it is not necessary to
   // do nultiple http connections to retrieve additional resources on the same
diff --git a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_factory.cc b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_factory.cc
index 38ac0e9..61f2e0a 100644
--- a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_factory.cc
+++ b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_factory.cc
@@ -9,7 +9,6 @@
 #include "base/bind.h"
 #include "base/logging.h"
 #include "base/stl_util.h"
-#include "mojo/public/cpp/application/application_impl.h"
 #include "mojo/public/cpp/application/connect.h"
 #include "services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor.h"
 
@@ -20,15 +19,13 @@
         mojo::InterfaceRequest<URLLoaderInterceptorFactory> request,
         mojo::InterfaceHandle<authentication::AuthenticationService>
             authentication_service,
-        mojo::ApplicationImpl* app,
+        mojo::Shell* shell,
         std::map<GURL, std::string>* cached_tokens)
     : binding_(this, request.Pass()),
       authentication_service_(authentication::AuthenticationServicePtr::Create(
           std::move(authentication_service))),
-      app_(app),
       cached_tokens_(cached_tokens) {
-  ConnectToService(app_->shell(), "mojo:network_service",
-                   GetProxy(&network_service_));
+  ConnectToService(shell, "mojo:network_service", GetProxy(&network_service_));
   authentication_service_.set_connection_error_handler(
       [this]() { ClearAuthenticationService(); });
 }
diff --git a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_factory.h b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_factory.h
index 62a3d81..e962680 100644
--- a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_factory.h
+++ b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_factory.h
@@ -16,18 +16,19 @@
 
 namespace mojo {
 
-class ApplicationImpl;
-
 class AuthenticatingURLLoaderInterceptor;
+class Shell;
 
 class AuthenticatingURLLoaderInterceptorFactory
     : public URLLoaderInterceptorFactory {
  public:
+  // TODO(vtl): Maybe this should take an |ApplicationConnectorPtr| instead of a
+  // |Shell*|.
   AuthenticatingURLLoaderInterceptorFactory(
       mojo::InterfaceRequest<URLLoaderInterceptorFactory> request,
       mojo::InterfaceHandle<authentication::AuthenticationService>
           authentication_service,
-      mojo::ApplicationImpl* app,
+      mojo::Shell* shell,
       std::map<GURL, std::string>* cached_tokens);
   ~AuthenticatingURLLoaderInterceptorFactory() override;
 
@@ -61,7 +62,6 @@
 
   StrongBinding<URLLoaderInterceptorFactory> binding_;
   authentication::AuthenticationServicePtr authentication_service_;
-  ApplicationImpl* app_;
   std::map<GURL, std::string>* cached_tokens_;
   std::map<GURL, std::string> cached_accounts_;
   NetworkServicePtr network_service_;
diff --git a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.cc b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.cc
index 15b4541..be5c5de 100644
--- a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.cc
+++ b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.cc
@@ -6,7 +6,6 @@
 
 #include <utility>
 
-#include "mojo/public/cpp/application/application_impl.h"
 #include "services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_factory.h"
 
 namespace mojo {
@@ -15,14 +14,14 @@
     AuthenticatingURLLoaderInterceptorMetaFactoryImpl(
         mojo::InterfaceRequest<AuthenticatingURLLoaderInterceptorMetaFactory>
             request,
-        mojo::ApplicationImpl* app,
+        mojo::Shell* shell,
         std::map<GURL, std::string>* cached_tokens)
-    : binding_(this, request.Pass()), app_(app), cached_tokens_(cached_tokens) {
-}
+    : binding_(this, request.Pass()),
+      shell_(shell),
+      cached_tokens_(cached_tokens) {}
 
 AuthenticatingURLLoaderInterceptorMetaFactoryImpl::
-    ~AuthenticatingURLLoaderInterceptorMetaFactoryImpl() {
-}
+    ~AuthenticatingURLLoaderInterceptorMetaFactoryImpl() {}
 
 void AuthenticatingURLLoaderInterceptorMetaFactoryImpl::
     CreateURLLoaderInterceptorFactory(
@@ -30,7 +29,7 @@
         InterfaceHandle<authentication::AuthenticationService>
             authentication_service) {
   new AuthenticatingURLLoaderInterceptorFactory(
-      factory_request.Pass(), std::move(authentication_service), app_,
+      factory_request.Pass(), std::move(authentication_service), shell_,
       cached_tokens_);
 }
 
diff --git a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.h b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.h
index 5b3a047..8596c03 100644
--- a/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.h
+++ b/services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_meta_factory_impl.h
@@ -16,7 +16,7 @@
 
 namespace mojo {
 
-class ApplicationImpl;
+class Shell;
 
 class AuthenticatingURLLoaderInterceptorMetaFactoryImpl
     : public AuthenticatingURLLoaderInterceptorMetaFactory {
@@ -24,7 +24,7 @@
   AuthenticatingURLLoaderInterceptorMetaFactoryImpl(
       mojo::InterfaceRequest<AuthenticatingURLLoaderInterceptorMetaFactory>
           request,
-      mojo::ApplicationImpl* app,
+      mojo::Shell* shell,
       std::map<GURL, std::string>* cached_tokens);
   ~AuthenticatingURLLoaderInterceptorMetaFactoryImpl() override;
 
@@ -36,7 +36,7 @@
           authentication_service) override;
 
   StrongBinding<AuthenticatingURLLoaderInterceptorMetaFactory> binding_;
-  ApplicationImpl* app_;
+  Shell* const shell_;
   std::map<GURL, std::string>* cached_tokens_;
 };
 
diff --git a/services/authenticating_url_loader_interceptor/main.cc b/services/authenticating_url_loader_interceptor/main.cc
index e375196..ff9548e 100644
--- a/services/authenticating_url_loader_interceptor/main.cc
+++ b/services/authenticating_url_loader_interceptor/main.cc
@@ -2,12 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "mojo/application/application_runner_chromium.h"
 #include "mojo/public/c/system/main.h"
+#include "mojo/public/cpp/application/run_application.h"
 #include "services/authenticating_url_loader_interceptor/authenticating_url_loader_interceptor_app.h"
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunnerChromium runner(
-      new mojo::AuthenticatingURLLoaderInterceptorApp);
-  return runner.Run(application_request);
+  mojo::AuthenticatingURLLoaderInterceptorApp app;
+  return mojo::RunMainApplication(application_request, &app);
 }
diff --git a/services/files/files_app.cc b/services/files/files_app.cc
index 368b5a0..b5e4f3b 100644
--- a/services/files/files_app.cc
+++ b/services/files/files_app.cc
@@ -4,6 +4,7 @@
 
 #include "services/files/files_app.h"
 
+#include "mojo/public/cpp/application/service_provider_impl.h"
 #include "mojo/services/files/interfaces/files.mojom.h"
 #include "services/files/files_impl.h"
 
@@ -13,8 +14,7 @@
 FilesApp::FilesApp() {}
 FilesApp::~FilesApp() {}
 
-bool FilesApp::ConfigureIncomingConnection(
-    ServiceProviderImpl* service_provider_impl) {
+bool FilesApp::OnAcceptConnection(ServiceProviderImpl* service_provider_impl) {
   service_provider_impl->AddService<Files>(
       [](const ConnectionContext& connection_context,
          InterfaceRequest<Files> files_request) {
diff --git a/services/files/files_app.h b/services/files/files_app.h
index 3bd7810..70b022d 100644
--- a/services/files/files_app.h
+++ b/services/files/files_app.h
@@ -6,21 +6,19 @@
 #define SERVICES_FILES_FILES_APP_H_
 
 #include "base/macros.h"
-#include "mojo/public/cpp/application/application_delegate.h"
-#include "mojo/public/cpp/application/service_provider_impl.h"
+#include "mojo/public/cpp/application/application_impl_base.h"
 
 namespace mojo {
 namespace files {
 
-class FilesApp : public ApplicationDelegate {
+class FilesApp : public ApplicationImplBase {
  public:
   FilesApp();
   ~FilesApp() override;
 
  private:
-  // |ApplicationDelegate| override:
-  bool ConfigureIncomingConnection(
-      ServiceProviderImpl* service_provider_impl) override;
+  // |ApplicationImplBase| override:
+  bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override;
 
   DISALLOW_COPY_AND_ASSIGN(FilesApp);
 };
diff --git a/services/files/main.cc b/services/files/main.cc
index 07effcf..500cd9e 100644
--- a/services/files/main.cc
+++ b/services/files/main.cc
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "mojo/application/application_runner_chromium.h"
 #include "mojo/public/c/system/main.h"
+#include "mojo/public/cpp/application/run_application.h"
 #include "services/files/files_app.h"
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunnerChromium runner(new mojo::files::FilesApp());
-  return runner.Run(application_request);
+  mojo::files::FilesApp files_app;
+  return mojo::RunMainApplication(application_request, &files_app);
 }
diff --git a/services/keyboard/linux/main.cc b/services/keyboard/linux/main.cc
index b96e49f..4784487 100644
--- a/services/keyboard/linux/main.cc
+++ b/services/keyboard/linux/main.cc
@@ -3,12 +3,9 @@
 // found in the LICENSE file.
 
 #include "base/macros.h"
-#include "base/threading/sequenced_worker_pool.h"
-#include "mojo/application/application_runner_chromium.h"
 #include "mojo/public/c/system/main.h"
-#include "mojo/public/cpp/application/application_delegate.h"
-#include "mojo/public/cpp/application/application_impl.h"
-#include "mojo/public/cpp/application/connect.h"
+#include "mojo/public/cpp/application/application_impl_base.h"
+#include "mojo/public/cpp/application/run_application.h"
 #include "mojo/public/cpp/application/service_provider_impl.h"
 #include "mojo/services/native_viewport/interfaces/native_viewport_event_dispatcher.mojom.h"
 #include "services/keyboard/linux/keyboard_service_impl.h"
@@ -34,15 +31,14 @@
   DISALLOW_COPY_AND_ASSIGN(KeyboardServiceFactoryImpl);
 };
 
-class KeyboardServiceApp : public mojo::ApplicationDelegate {
+class KeyboardServiceApp : public mojo::ApplicationImplBase {
  public:
   KeyboardServiceApp() {}
   ~KeyboardServiceApp() override {}
 
  private:
-
-  // |ApplicationDelegate| override:
-  bool ConfigureIncomingConnection(
+  // |ApplicationImplBase| override:
+  bool OnAcceptConnection(
       mojo::ServiceProviderImpl* service_provider_impl) override {
     service_provider_impl->AddService<KeyboardServiceFactory>([](
         const mojo::ConnectionContext& connection_context,
@@ -60,7 +56,6 @@
 }  // namespace keyboard
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunnerChromium runner(
-      new keyboard::KeyboardServiceApp());
-  return runner.Run(application_request);
+  keyboard::KeyboardServiceApp keyboard_service_app;
+  return mojo::RunMainApplication(application_request, &keyboard_service_app);
 }
diff --git a/services/media/audio/audio_server_app.cc b/services/media/audio/audio_server_app.cc
index ef268c9..0da6188 100644
--- a/services/media/audio/audio_server_app.cc
+++ b/services/media/audio/audio_server_app.cc
@@ -3,10 +3,9 @@
 // found in the LICENSE file.
 
 #include "base/logging.h"
-#include "mojo/application/application_runner_chromium.h"
 #include "mojo/public/c/system/main.h"
-#include "mojo/public/cpp/application/application_delegate.h"
-#include "mojo/public/cpp/application/application_impl.h"
+#include "mojo/public/cpp/application/run_application.h"
+#include "mojo/public/cpp/application/service_provider_impl.h"
 #include "services/media/audio/audio_server_app.h"
 
 namespace mojo {
@@ -14,13 +13,12 @@
 namespace audio {
 
 AudioServerApp::AudioServerApp() {}
+
 AudioServerApp::~AudioServerApp() {}
 
-void AudioServerApp::Initialize(ApplicationImpl* app) {
-  server_impl_.Initialize();
-}
+void AudioServerApp::OnInitialize() {}
 
-bool AudioServerApp::ConfigureIncomingConnection(
+bool AudioServerApp::OnAcceptConnection(
     ServiceProviderImpl* service_provider_impl) {
   service_provider_impl->AddService<AudioServer>(
       [this](const ConnectionContext& connection_context,
@@ -30,15 +28,11 @@
   return true;
 }
 
-void AudioServerApp::Quit() {
-}
-
 }  // namespace audio
 }  // namespace media
 }  // namespace mojo
 
 MojoResult MojoMain(MojoHandle app_request) {
-  mojo::ApplicationRunnerChromium runner(
-      new mojo::media::audio::AudioServerApp);
-  return runner.Run(app_request);
+  mojo::media::audio::AudioServerApp audio_server_app;
+  return mojo::RunMainApplication(app_request, &audio_server_app);
 }
diff --git a/services/media/audio/audio_server_app.h b/services/media/audio/audio_server_app.h
index 87f6a39..6de3b15 100644
--- a/services/media/audio/audio_server_app.h
+++ b/services/media/audio/audio_server_app.h
@@ -6,7 +6,7 @@
 #define SERVICES_MEDIA_AUDIO_AUDIO_SERVER_APP_H_
 
 #include "mojo/common/binding_set.h"
-#include "mojo/public/cpp/application/application_delegate.h"
+#include "mojo/public/cpp/application/application_impl_base.h"
 #include "mojo/services/media/audio/interfaces/audio_server.mojom.h"
 #include "services/media/audio/audio_server_impl.h"
 
@@ -14,16 +14,14 @@
 namespace media {
 namespace audio {
 
-class AudioServerApp : public ApplicationDelegate {
+class AudioServerApp : public ApplicationImplBase {
  public:
   AudioServerApp();
   ~AudioServerApp() override;
 
-  // ApplicationDelegate
-  void Initialize(ApplicationImpl* app) override;
-  bool ConfigureIncomingConnection(
-      ServiceProviderImpl* service_provider_impl) override;
-  void Quit() override;
+  // ApplicationImplBase overrides:
+  void OnInitialize() override;
+  bool OnAcceptConnection(ServiceProviderImpl* service_provider_impl) override;
 
  private:
   AudioServerImpl server_impl_;
diff --git a/services/native_support/main.cc b/services/native_support/main.cc
index 912ebc6..e174a31 100644
--- a/services/native_support/main.cc
+++ b/services/native_support/main.cc
@@ -6,9 +6,10 @@
 #include "base/memory/ref_counted.h"
 #include "base/message_loop/message_loop.h"
 #include "base/threading/sequenced_worker_pool.h"
-#include "mojo/application/application_runner_chromium.h"
+#include "mojo/application/run_application_options_chromium.h"
 #include "mojo/public/c/system/main.h"
-#include "mojo/public/cpp/application/application_delegate.h"
+#include "mojo/public/cpp/application/application_impl_base.h"
+#include "mojo/public/cpp/application/run_application.h"
 #include "mojo/public/cpp/application/service_provider_impl.h"
 #include "mojo/services/native_support/interfaces/process.mojom.h"
 #include "services/native_support/process_impl.h"
@@ -18,17 +19,18 @@
 // TODO(vtl): Having to manually choose an arbitrary number is dumb.
 const size_t kMaxWorkerThreads = 16;
 
-class NativeSupportApp : public mojo::ApplicationDelegate {
+class NativeSupportApp : public mojo::ApplicationImplBase {
  public:
   NativeSupportApp() {}
   ~NativeSupportApp() override {
-    if (worker_pool_)
-      worker_pool_->Shutdown();
+    // TODO(vtl): Doing this here is a bit of a hack, but we may not
+    // consistently call |OnQuit()|.
+    OnQuit();
   }
 
  private:
-  // |mojo::ApplicationDelegate| override:
-  bool ConfigureIncomingConnection(
+  // |mojo::ApplicationImplBase| overrides:
+  bool OnAcceptConnection(
       mojo::ServiceProviderImpl* service_provider_impl) override {
     service_provider_impl->AddService<Process>([this](
         const mojo::ConnectionContext& connection_context,
@@ -42,6 +44,13 @@
     return true;
   }
 
+  void OnQuit() override {
+    if (worker_pool_) {
+      worker_pool_->Shutdown();
+      worker_pool_ = nullptr;
+    }
+  }
+
   scoped_refptr<base::SequencedWorkerPool> worker_pool_;
 
   DISALLOW_COPY_AND_ASSIGN(NativeSupportApp);
@@ -50,9 +59,9 @@
 }  // namespace native_support
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunnerChromium runner(
-      new native_support::NativeSupportApp());
+  native_support::NativeSupportApp native_support_app;
   // We need an I/O message loop, since we'll want to watch FDs.
-  runner.set_message_loop_type(base::MessageLoop::TYPE_IO);
-  return runner.Run(application_request);
+  mojo::RunApplicationOptionsChromium options(base::MessageLoop::TYPE_IO);
+  return mojo::RunMainApplication(application_request, &native_support_app,
+                                  &options);
 }
diff --git a/services/prediction/prediction_service_impl.cc b/services/prediction/prediction_service_impl.cc
index 42bf597..ce26d6e 100644
--- a/services/prediction/prediction_service_impl.cc
+++ b/services/prediction/prediction_service_impl.cc
@@ -4,8 +4,9 @@
 
 #include "services/prediction/prediction_service_impl.h"
 
-#include "mojo/application/application_runner_chromium.h"
 #include "mojo/public/c/system/main.h"
+#include "mojo/public/cpp/application/application_impl_base.h"
+#include "mojo/public/cpp/application/run_application.h"
 #include "mojo/public/cpp/application/service_provider_impl.h"
 
 namespace prediction {
@@ -30,24 +31,27 @@
   callback.Run(prediction_list.Pass());
 }
 
-PredictionServiceDelegate::PredictionServiceDelegate() {}
+// TODO(vtl): Maybe this (and MojoMain()) should go in a different file?
+class PredictionServiceApp : public mojo::ApplicationImplBase {
+ public:
+  PredictionServiceApp() {}
+  ~PredictionServiceApp() override {}
 
-PredictionServiceDelegate::~PredictionServiceDelegate() {}
-
-bool PredictionServiceDelegate::ConfigureIncomingConnection(
-    mojo::ServiceProviderImpl* service_provider_impl) {
-  service_provider_impl->AddService<PredictionService>(
-      [](const mojo::ConnectionContext& connection_context,
-         mojo::InterfaceRequest<PredictionService> prediction_service_request) {
-        new PredictionServiceImpl(prediction_service_request.Pass());
-      });
-  return true;
-}
+  // mojo::ApplicationImplBase override:
+  bool OnAcceptConnection(
+      mojo::ServiceProviderImpl* service_provider_impl) override {
+    service_provider_impl->AddService<PredictionService>([](
+        const mojo::ConnectionContext& connection_context,
+        mojo::InterfaceRequest<PredictionService> prediction_service_request) {
+      new PredictionServiceImpl(prediction_service_request.Pass());
+    });
+    return true;
+  }
+};
 
 }  // namespace prediction
 
 MojoResult MojoMain(MojoHandle application_request) {
-  mojo::ApplicationRunnerChromium runner(
-      new prediction::PredictionServiceDelegate());
-  return runner.Run(application_request);
+  prediction::PredictionServiceApp prediction_service_app;
+  return mojo::RunMainApplication(application_request, &prediction_service_app);
 }
diff --git a/services/prediction/prediction_service_impl.h b/services/prediction/prediction_service_impl.h
index dc02b87..b1d9944 100644
--- a/services/prediction/prediction_service_impl.h
+++ b/services/prediction/prediction_service_impl.h
@@ -6,7 +6,6 @@
 #define SERVICES_PREDICTION_PREDICTION_SERVICE_IMPL_H_
 
 #include "base/memory/scoped_ptr.h"
-#include "mojo/public/cpp/application/application_delegate.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "mojo/services/prediction/interfaces/prediction.mojom.h"
 #include "services/prediction/dictionary_service.h"
@@ -32,16 +31,6 @@
   DISALLOW_COPY_AND_ASSIGN(PredictionServiceImpl);
 };
 
-class PredictionServiceDelegate : public mojo::ApplicationDelegate {
- public:
-  PredictionServiceDelegate();
-  ~PredictionServiceDelegate() override;
-
-  // mojo::ApplicationDelegate implementation
-  bool ConfigureIncomingConnection(
-      mojo::ServiceProviderImpl* service_provider_impl) override;
-};
-
 }  // namespace prediction
 
 #endif  // SERVICES_PREDICTION_PREDICTION_SERVICE_IMPL_H_
