diff --git a/mojo/gles2/control_thunks_impl.cc b/mojo/gles2/control_thunks_impl.cc
index 67e4bbb..ab0d48c 100644
--- a/mojo/gles2/control_thunks_impl.cc
+++ b/mojo/gles2/control_thunks_impl.cc
@@ -20,8 +20,8 @@
 
 // static
 ControlThunksImpl* ControlThunksImpl::Get() {
-  static base::LazyInstance<ControlThunksImpl>::Leaky thunks;
-  return thunks.Pointer();
+  static auto* thunks = new ControlThunksImpl;
+  return thunks;
 }
 
 MGLContext ControlThunksImpl::CreateContext(
diff --git a/mojo/gles2/control_thunks_impl.h b/mojo/gles2/control_thunks_impl.h
index c240939..13a794b 100644
--- a/mojo/gles2/control_thunks_impl.h
+++ b/mojo/gles2/control_thunks_impl.h
@@ -5,7 +5,6 @@
 #ifndef MOJO_GLES2_CONTROL_THUNKS_IMPL_H_
 #define MOJO_GLES2_CONTROL_THUNKS_IMPL_H_
 
-#include "base/lazy_instance.h"
 #include "base/macros.h"
 #include "base/threading/thread_local.h"
 #include "gpu/GLES2/gl2extchromium.h"
@@ -56,7 +55,6 @@
   gpu::gles2::GLES2Interface* CurrentGLES2Interface();
 
  private:
-  friend base::DefaultLazyInstanceTraits<gles2::ControlThunksImpl>;
   ControlThunksImpl();
   ~ControlThunksImpl();
 
diff --git a/mojo/message_pump/handle_watcher.cc b/mojo/message_pump/handle_watcher.cc
index 2465579..c330d31 100644
--- a/mojo/message_pump/handle_watcher.cc
+++ b/mojo/message_pump/handle_watcher.cc
@@ -8,7 +8,6 @@
 
 #include "base/atomic_sequence_num.h"
 #include "base/bind.h"
-#include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/memory/singleton.h"
diff --git a/mojo/message_pump/message_pump_mojo.cc b/mojo/message_pump/message_pump_mojo.cc
index e7f7d10..1786ba1 100644
--- a/mojo/message_pump/message_pump_mojo.cc
+++ b/mojo/message_pump/message_pump_mojo.cc
@@ -8,7 +8,6 @@
 #include <vector>
 
 #include "base/debug/alias.h"
-#include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/threading/thread_local.h"
 #include "base/time/time.h"
@@ -19,8 +18,10 @@
 namespace common {
 namespace {
 
-base::LazyInstance<base::ThreadLocalPointer<MessagePumpMojo> >::Leaky
-    g_tls_current_pump = LAZY_INSTANCE_INITIALIZER;
+base::ThreadLocalPointer<MessagePumpMojo>* CurrentPump() {
+  static auto* tls = new base::ThreadLocalPointer<MessagePumpMojo>;
+  return tls;
+}
 
 MojoDeadline TimeTicksToMojoDeadline(base::TimeTicks time_ticks,
                                      base::TimeTicks now) {
@@ -44,7 +45,7 @@
 
 struct MessagePumpMojo::RunState {
   RunState() : should_quit(false) {
-    CreateMessagePipe(NULL, &read_handle, &write_handle);
+    CreateMessagePipe(nullptr, &read_handle, &write_handle);
   }
 
   base::TimeTicks delayed_work_time;
@@ -60,15 +61,15 @@
   bool should_quit;
 };
 
-MessagePumpMojo::MessagePumpMojo() : run_state_(NULL), next_handler_id_(0) {
+MessagePumpMojo::MessagePumpMojo() : run_state_(nullptr), next_handler_id_(0) {
   DCHECK(!current())
       << "There is already a MessagePumpMojo instance on this thread.";
-  g_tls_current_pump.Pointer()->Set(this);
+  CurrentPump()->Set(this);
 }
 
 MessagePumpMojo::~MessagePumpMojo() {
   DCHECK_EQ(this, current());
-  g_tls_current_pump.Pointer()->Set(NULL);
+  CurrentPump()->Set(nullptr);
 }
 
 // static
@@ -78,7 +79,7 @@
 
 // static
 MessagePumpMojo* MessagePumpMojo::current() {
-  return g_tls_current_pump.Pointer()->Get();
+  return CurrentPump()->Get();
 }
 
 void MessagePumpMojo::AddHandler(MessagePumpMojoHandler* handler,
@@ -114,7 +115,7 @@
   // TODO: better deal with error handling.
   CHECK(run_state.read_handle.is_valid());
   CHECK(run_state.write_handle.is_valid());
-  RunState* old_state = NULL;
+  RunState* old_state = nullptr;
   {
     base::AutoLock auto_lock(run_state_lock_);
     old_state = run_state_;
@@ -188,8 +189,8 @@
   if (result == MOJO_RESULT_OK) {
     if (wait_many_result.index == 0) {
       // Control pipe was written to.
-      ReadMessageRaw(run_state.read_handle.get(), NULL, NULL, NULL, NULL,
-                     MOJO_READ_MESSAGE_FLAG_MAY_DISCARD);
+      ReadMessageRaw(run_state.read_handle.get(), nullptr, nullptr, nullptr,
+                     nullptr, MOJO_READ_MESSAGE_FLAG_MAY_DISCARD);
     } else {
       DCHECK(handlers_.find(
                  run_state_->wait_state->handles[wait_many_result.index]) !=
@@ -281,7 +282,7 @@
 
 void MessagePumpMojo::SignalControlPipe(const RunState& run_state) {
   const MojoResult result =
-      WriteMessageRaw(run_state.write_handle.get(), NULL, 0, NULL, 0,
+      WriteMessageRaw(run_state.write_handle.get(), nullptr, 0, nullptr, 0,
                       MOJO_WRITE_MESSAGE_FLAG_NONE);
   // If we can't write we likely won't wake up the thread and there is a strong
   // chance we'll deadlock.
diff --git a/shell/context.cc b/shell/context.cc
index 8569a1a..101ea61 100644
--- a/shell/context.cc
+++ b/shell/context.cc
@@ -9,9 +9,9 @@
 #include "base/base_switches.h"
 #include "base/bind.h"
 #include "base/command_line.h"
+#include "base/compiler_specific.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
-#include "base/lazy_instance.h"
 #include "base/macros.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
@@ -53,19 +53,6 @@
 namespace shell {
 namespace {
 
-// Used to ensure we only init once.
-class Setup {
- public:
-  Setup() {
-    mojo::embedder::Init(mojo::embedder::CreateSimplePlatformSupport());
-  }
-
-  ~Setup() {}
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(Setup);
-};
-
 ApplicationManager::Options MakeApplicationManagerOptions() {
   ApplicationManager::Options options;
   options.disable_cache = base::CommandLine::ForCurrentProcess()->HasSwitch(
@@ -253,8 +240,11 @@
 
 // static
 void Context::EnsureEmbedderIsInitialized() {
-  static base::LazyInstance<Setup>::Leaky setup = LAZY_INSTANCE_INITIALIZER;
-  setup.Get();
+  static bool initialized = ([]() {
+    mojo::embedder::Init(mojo::embedder::CreateSimplePlatformSupport());
+    return true;
+  })();
+  ALLOW_UNUSED_LOCAL(initialized);
 }
 
 void Context::SetShellFileRoot(const base::FilePath& path) {
