diff --git a/src/cobalt/base/wrap_main_starboard.h b/src/cobalt/base/wrap_main_starboard.h
index aa57397..15ababb 100644
--- a/src/cobalt/base/wrap_main_starboard.h
+++ b/src/cobalt/base/wrap_main_starboard.h
@@ -36,7 +36,7 @@
   static MessageLoopForUI* g_loop = NULL;
   static bool g_started = false;
   switch (event->type) {
-#if SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#if SB_API_VERSION >= 6
     case kSbEventTypePreload: {
       SbEventStartData* data = static_cast<SbEventStartData*>(event->data);
 
@@ -55,7 +55,7 @@
       g_started = true;
       break;
     }
-#endif  // SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#endif  // SB_API_VERSION >= 6
     case kSbEventTypeStart: {
       SbEventStartData* data = static_cast<SbEventStartData*>(event->data);
 
diff --git a/src/cobalt/bindings/v8c/__init__.py b/src/cobalt/bindings/v8c/__init__.py
new file mode 100644
index 0000000..ef65bee
--- /dev/null
+++ b/src/cobalt/bindings/v8c/__init__.py
@@ -0,0 +1 @@
+# Required for Python to search this directory for module files
diff --git a/src/cobalt/bindings/v8c/bootstrap_path.py b/src/cobalt/bindings/v8c/bootstrap_path.py
new file mode 100644
index 0000000..69a1b65
--- /dev/null
+++ b/src/cobalt/bindings/v8c/bootstrap_path.py
@@ -0,0 +1,49 @@
+#
+# Copyright 2017 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+"""Utility to prepend the top-level source directory to sys.path.
+
+Since this may be used outside of gclient or git environment (such as part of a
+tarball), the path to the root must be hardcoded.
+"""
+
+import os
+import sys
+
+
+def _GetSrcRoot():
+  """Finds the first directory named 'src' that this module is in."""
+  current_path = os.path.normpath(__file__)
+  while os.path.basename(current_path) != 'src':
+    next_path = os.path.dirname(current_path)
+    if next_path == current_path:
+      raise RuntimeError('Could not find src directory.')
+    current_path = next_path
+  return os.path.abspath(current_path)
+
+
+sys.path.insert(0, _GetSrcRoot())
+
+# Add blink's python tools to the path.
+
+sys.path.append(
+    os.path.normpath(
+        os.path.join(_GetSrcRoot(), 'third_party', 'blink', 'Tools',
+                     'Scripts')))
+
+sys.path.append(
+    os.path.normpath(
+        os.path.join(_GetSrcRoot(), 'third_party', 'blink', 'Source',
+                     'bindings', 'scripts')))
diff --git a/src/cobalt/bindings/v8c/code_generator_v8c.py b/src/cobalt/bindings/v8c/code_generator_v8c.py
new file mode 100644
index 0000000..ca927f3
--- /dev/null
+++ b/src/cobalt/bindings/v8c/code_generator_v8c.py
@@ -0,0 +1,61 @@
+# Copyright 2017 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""V8c-specific implementation of CodeGeneratorCobalt.
+
+Defines CodeGeneratorV8c and ExpressionGeneratorV8c classes.
+"""
+
+import os
+
+from cobalt.bindings.code_generator_cobalt import CodeGeneratorCobalt
+from cobalt.bindings.expression_generator import ExpressionGenerator
+
+
+class ExpressionGeneratorV8c(ExpressionGenerator):
+  """Implementation of ExpressionGenerator for V8."""
+
+  def is_undefined(self, arg):
+    # TODO: Implement.
+    return ''
+
+  def is_undefined_or_null(self, arg):
+    # TODO: Implement.
+    return ''
+
+  def inherits_interface(self, interface_name, arg):
+    # TODO: Implement.
+    return ''
+
+  def is_number(self, arg):
+    # TODO: Implement.
+    return ''
+
+
+class CodeGeneratorV8c(CodeGeneratorCobalt):
+  """Code generator class for V8 bindings."""
+
+  _expression_generator = ExpressionGeneratorV8c()
+
+  def __init__(self, *args, **kwargs):
+    module_path, _ = os.path.split(os.path.realpath(__file__))
+    templates_dir = os.path.normpath(os.path.join(module_path, 'templates'))
+    super(CodeGeneratorV8c, self).__init__(templates_dir, *args, **kwargs)
+
+  @property
+  def generated_file_prefix(self):
+    return 'v8c'
+
+  @property
+  def expression_generator(self):
+    return CodeGeneratorV8c._expression_generator
diff --git a/src/cobalt/bindings/v8c/generate_conversion_header_v8c.py b/src/cobalt/bindings/v8c/generate_conversion_header_v8c.py
new file mode 100644
index 0000000..8901cc2
--- /dev/null
+++ b/src/cobalt/bindings/v8c/generate_conversion_header_v8c.py
@@ -0,0 +1,24 @@
+# Copyright 2017 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Generate a conversion header for SpiderMonkey."""
+
+import sys
+
+import bootstrap_path  # pylint: disable=g-bad-import-order,unused-import
+
+from cobalt.bindings.generate_conversion_header import generate_header
+from cobalt.bindings.v8c.code_generator_v8c import CodeGeneratorV8c
+
+if __name__ == '__main__':
+  sys.exit(generate_header(CodeGeneratorV8c))
diff --git a/src/cobalt/bindings/v8c/idl_compiler_v8c.py b/src/cobalt/bindings/v8c/idl_compiler_v8c.py
new file mode 100644
index 0000000..6c8c92e
--- /dev/null
+++ b/src/cobalt/bindings/v8c/idl_compiler_v8c.py
@@ -0,0 +1,28 @@
+# Copyright 2017 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Compile an .idl file to Cobalt v8c bindings (.h and .cpp files).
+
+Calls into idl_compiler_cobalt.shared_main specifying the V8
+CodeGenerator class.
+"""
+
+import sys
+
+import bootstrap_path  # pylint: disable=unused-import
+
+from cobalt.bindings.idl_compiler_cobalt import generate_bindings
+from cobalt.bindings.v8c.code_generator_v8c import CodeGeneratorV8c
+
+if __name__ == '__main__':
+  sys.exit(generate_bindings(CodeGeneratorV8c))
diff --git a/src/cobalt/bindings/v8c/templates/callback-interface.cc.template b/src/cobalt/bindings/v8c/templates/callback-interface.cc.template
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/cobalt/bindings/v8c/templates/callback-interface.cc.template
diff --git a/src/cobalt/bindings/v8c/templates/callback-interface.h.template b/src/cobalt/bindings/v8c/templates/callback-interface.h.template
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/cobalt/bindings/v8c/templates/callback-interface.h.template
diff --git a/src/cobalt/bindings/v8c/templates/dictionary-conversion.cc.template b/src/cobalt/bindings/v8c/templates/dictionary-conversion.cc.template
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/cobalt/bindings/v8c/templates/dictionary-conversion.cc.template
diff --git a/src/cobalt/bindings/v8c/templates/enumeration-conversion.cc.template b/src/cobalt/bindings/v8c/templates/enumeration-conversion.cc.template
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/cobalt/bindings/v8c/templates/enumeration-conversion.cc.template
diff --git a/src/cobalt/bindings/v8c/templates/generated-types.h.template b/src/cobalt/bindings/v8c/templates/generated-types.h.template
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/cobalt/bindings/v8c/templates/generated-types.h.template
diff --git a/src/cobalt/bindings/v8c/templates/interface.cc.template b/src/cobalt/bindings/v8c/templates/interface.cc.template
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/cobalt/bindings/v8c/templates/interface.cc.template
diff --git a/src/cobalt/bindings/v8c/templates/interface.h.template b/src/cobalt/bindings/v8c/templates/interface.h.template
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/cobalt/bindings/v8c/templates/interface.h.template
diff --git a/src/cobalt/bindings/v8c/templates/macros.cc.template b/src/cobalt/bindings/v8c/templates/macros.cc.template
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/cobalt/bindings/v8c/templates/macros.cc.template
diff --git a/src/cobalt/browser/application.cc b/src/cobalt/browser/application.cc
index aa2919a..a946dee 100644
--- a/src/cobalt/browser/application.cc
+++ b/src/cobalt/browser/application.cc
@@ -587,6 +587,9 @@
   if (command_line->HasSwitch(switches::kDisableImageAnimations)) {
     options.web_module_options.enable_image_animations = false;
   }
+  if (command_line->HasSwitch(switches::kDisableSplashScreenOnReloads)) {
+    options.enable_splash_screen_on_reloads = false;
+  }
 #endif  // ENABLE_DEBUG_COMMAND_LINE_SWITCHES
 
 // Production-builds override all switches to the most secure configuration.
@@ -736,9 +739,9 @@
     case kSbEventTypeUnpause:
     case kSbEventTypeSuspend:
     case kSbEventTypeResume:
-#if SB_API_VERSION >= SB_LOW_MEMORY_EVENT_API_VERSION
+#if SB_API_VERSION >= 6
     case kSbEventTypeLowMemory:
-#endif  // SB_API_VERSION >= SB_LOW_MEMORY_EVENT_API_VERSION
+#endif  // SB_API_VERSION >= 6
       OnApplicationEvent(starboard_event->type);
       break;
     case kSbEventTypeNetworkConnect:
@@ -828,13 +831,13 @@
       browser_module_->Resume();
       DLOG(INFO) << "Finished resuming.";
       break;
-#if SB_API_VERSION >= SB_LOW_MEMORY_EVENT_API_VERSION
+#if SB_API_VERSION >= 6
     case kSbEventTypeLowMemory:
       DLOG(INFO) << "Got low memory event.";
       browser_module_->ReduceMemory();
       DLOG(INFO) << "Finished reducing memory usage.";
       break;
-#endif  // SB_API_VERSION >= SB_LOW_MEMORY_EVENT_API_VERSION
+#endif  // SB_API_VERSION >= 6
     default:
       NOTREACHED() << "Unexpected event type: " << event_type;
       return;
diff --git a/src/cobalt/browser/browser_module.cc b/src/cobalt/browser/browser_module.cc
index 4294695..4322073 100644
--- a/src/cobalt/browser/browser_module.cc
+++ b/src/cobalt/browser/browser_module.cc
@@ -228,6 +228,7 @@
       web_module_loaded_(true /* manually_reset */,
                          false /* initially_signalled */),
       web_module_recreated_callback_(options_.web_module_recreated_callback),
+      navigate_count_(0),
       navigate_time_("Time.Browser.Navigate", 0,
                      "The last time a navigation occurred."),
       on_load_event_time_("Time.Browser.OnLoadEvent", 0,
@@ -281,6 +282,16 @@
 #endif
   TRACE_EVENT0("cobalt::browser", "BrowserModule::BrowserModule()");
 
+  // Create the main web module layer.
+  main_web_module_layer_ =
+      render_tree_combiner_.CreateLayer(kMainWebModuleZIndex);
+  // Create the splash screen layer.
+  splash_screen_layer_ = render_tree_combiner_.CreateLayer(kSplashScreenZIndex);
+// Create the debug console layer.
+#if defined(ENABLE_DEBUG_CONSOLE)
+  debug_console_layer_ = render_tree_combiner_.CreateLayer(kDebugConsoleZIndex);
+#endif
+
   // Setup our main web module to have the H5VCC API injected into it.
   DCHECK(!ContainsKey(options_.web_module_options.injected_window_attributes,
                       "h5vcc"));
@@ -407,30 +418,27 @@
 
   // Wait until after the old WebModule is destroyed before setting the navigate
   // time so that it won't be included in the time taken to load the URL.
+  ++navigate_count_;
   navigate_time_ = base::TimeTicks::Now().ToInternalValue();
 
   // Show a splash screen while we're waiting for the web page to load.
   const math::Size& viewport_size = GetViewportSize();
 
   DestroySplashScreen(base::TimeDelta());
-  base::optional<std::string> key = SplashScreenCache::GetKeyForStartUrl(url);
-  if (fallback_splash_screen_url_ ||
-      (key && splash_screen_cache_->IsSplashScreenCached(*key))) {
-    // Create the splash screen layer.
-    if (render_tree_combiner_) {
-      splash_screen_layer_ =
-          render_tree_combiner_->CreateLayer(kSplashScreenZIndex);
+  if (options_.enable_splash_screen_on_reloads || navigate_count_ == 1) {
+    base::optional<std::string> key = SplashScreenCache::GetKeyForStartUrl(url);
+    if (fallback_splash_screen_url_ ||
+        (key && splash_screen_cache_->IsSplashScreenCached(*key))) {
+      splash_screen_.reset(new SplashScreen(
+          application_state_,
+          base::Bind(&BrowserModule::QueueOnSplashScreenRenderTreeProduced,
+                     base::Unretained(this)),
+          &network_module_, viewport_size, GetResourceProvider(),
+          kLayoutMaxRefreshFrequencyInHz, fallback_splash_screen_url_, url,
+          splash_screen_cache_.get(),
+          base::Bind(&BrowserModule::DestroySplashScreen, weak_this_)));
+      lifecycle_observers_.AddObserver(splash_screen_.get());
     }
-
-    splash_screen_.reset(new SplashScreen(
-        application_state_,
-        base::Bind(&BrowserModule::QueueOnSplashScreenRenderTreeProduced,
-                   base::Unretained(this)),
-        &network_module_, viewport_size, GetResourceProvider(),
-        kLayoutMaxRefreshFrequencyInHz, fallback_splash_screen_url_, url,
-        splash_screen_cache_.get(),
-        base::Bind(&BrowserModule::DestroySplashScreen, weak_this_)));
-    lifecycle_observers_.AddObserver(splash_screen_.get());
   }
 
   // Create new WebModule.
@@ -594,8 +602,7 @@
   if (splash_screen_ && !splash_screen_->ShutdownSignaled()) {
     splash_screen_->Shutdown();
   }
-  if (application_state_ == base::kApplicationStatePreloading ||
-      !render_tree_combiner_ || !main_web_module_layer_) {
+  if (application_state_ == base::kApplicationStatePreloading) {
     return;
   }
 
@@ -610,7 +617,7 @@
   renderer_submission.on_rasterized_callback = base::Bind(
       &BrowserModule::OnRendererSubmissionRasterized, base::Unretained(this));
   if (!splash_screen_) {
-    render_tree_combiner_->SetTimelineLayer(main_web_module_layer_.get());
+    render_tree_combiner_.SetTimelineLayer(main_web_module_layer_.get());
   }
   main_web_module_layer_->Submit(renderer_submission);
 
@@ -628,7 +635,7 @@
   DCHECK_EQ(MessageLoop::current(), self_message_loop_);
 
   if (application_state_ == base::kApplicationStatePreloading ||
-      !render_tree_combiner_ || !splash_screen_layer_) {
+      !splash_screen_) {
     return;
   }
 
@@ -654,7 +661,7 @@
 
   renderer_submission.on_rasterized_callback = base::Bind(
       &BrowserModule::OnRendererSubmissionRasterized, base::Unretained(this));
-  render_tree_combiner_->SetTimelineLayer(splash_screen_layer_.get());
+  render_tree_combiner_.SetTimelineLayer(splash_screen_layer_.get());
   splash_screen_layer_->Submit(renderer_submission);
 
 #if defined(ENABLE_SCREENSHOT)
@@ -750,8 +757,7 @@
   TRACE_EVENT0("cobalt::browser",
                "BrowserModule::OnDebugConsoleRenderTreeProduced()");
   DCHECK_EQ(MessageLoop::current(), self_message_loop_);
-  if (application_state_ == base::kApplicationStatePreloading ||
-      !render_tree_combiner_ || !debug_console_layer_) {
+  if (application_state_ == base::kApplicationStatePreloading) {
     return;
   }
 
@@ -967,18 +973,16 @@
   }
   if (splash_screen_) {
     lifecycle_observers_.RemoveObserver(splash_screen_.get());
-  }
-  if (splash_screen_layer_) {
-    if (!close_time.is_zero()) {
+    if (!close_time.is_zero() && renderer_module_) {
       // Ensure that the renderer renders each frame up until the window.close()
       // is called on the splash screen's timeline, in order to ensure that the
       // splash screen shutdown transition plays out completely.
       renderer_module_->pipeline()->TimeFence(close_time);
     }
-    splash_screen_layer_.reset(NULL);
+    splash_screen_layer_->Reset();
     SubmitCurrentRenderTreeToRenderer();
+    splash_screen_.reset(NULL);
   }
-  splash_screen_.reset(NULL);
 }
 
 #if defined(ENABLE_WEBDRIVER)
@@ -1208,16 +1212,6 @@
       RendererModuleWithCameraOptions(options_.renderer_module_options,
                                       input_device_manager_->camera_3d())));
 
-  render_tree_combiner_.reset(new RenderTreeCombiner());
-  // Create the main web module layer.
-  main_web_module_layer_ =
-      render_tree_combiner_->CreateLayer(kMainWebModuleZIndex);
-// Create the debug console layer.
-#if defined(ENABLE_DEBUG_CONSOLE)
-  debug_console_layer_ =
-      render_tree_combiner_->CreateLayer(kDebugConsoleZIndex);
-#endif
-
 #if defined(ENABLE_SCREENSHOT)
   screen_shot_writer_.reset(new ScreenShotWriter(renderer_module_->pipeline()));
 #endif  // defined(ENABLE_SCREENSHOT)
@@ -1273,15 +1267,9 @@
 
   // Clear out the render tree combiner so that it doesn't hold on to any
   // render tree resources either.
-  if (main_web_module_layer_) {
-    main_web_module_layer_->Reset();
-  }
-  if (splash_screen_layer_) {
-    splash_screen_layer_->Reset();
-  }
-  if (debug_console_layer_) {
-    debug_console_layer_->Reset();
-  }
+  main_web_module_layer_->Reset();
+  splash_screen_layer_->Reset();
+  debug_console_layer_->Reset();
 
 #if defined(ENABLE_GPU_ARRAY_BUFFER_ALLOCATOR)
   // Note that the following function call will leak the GPU memory allocated.
@@ -1419,8 +1407,12 @@
 }
 
 void BrowserModule::SubmitCurrentRenderTreeToRenderer() {
+  if (!renderer_module_) {
+    return;
+  }
+
   base::optional<renderer::Submission> submission =
-      render_tree_combiner_->GetCurrentSubmission();
+      render_tree_combiner_.GetCurrentSubmission();
   if (submission) {
     renderer_module_->pipeline()->Submit(*submission);
   }
diff --git a/src/cobalt/browser/browser_module.h b/src/cobalt/browser/browser_module.h
index 32ec219..6f95f5c 100644
--- a/src/cobalt/browser/browser_module.h
+++ b/src/cobalt/browser/browser_module.h
@@ -75,8 +75,8 @@
         : web_module_options(web_options),
           command_line_auto_mem_settings(
               memory_settings::AutoMemSettings::kTypeCommandLine),
-          build_auto_mem_settings(
-              memory_settings::AutoMemSettings::kTypeBuild) {}
+          build_auto_mem_settings(memory_settings::AutoMemSettings::kTypeBuild),
+          enable_splash_screen_on_reloads(true) {}
     network::NetworkModule::Options network_module_options;
     renderer::RendererModule::Options renderer_module_options;
     storage::StorageManager::Options storage_manager_options;
@@ -89,6 +89,7 @@
     memory_settings::AutoMemSettings build_auto_mem_settings;
     base::optional<GURL> fallback_splash_screen_url;
     base::optional<math::Size> requested_viewport_size;
+    bool enable_splash_screen_on_reloads;
   };
 
   // Type for a collection of URL handler callbacks that can potentially handle
@@ -393,7 +394,7 @@
   network::NetworkModule network_module_;
 
   // Manages the three render trees, combines and renders them.
-  scoped_ptr<RenderTreeCombiner> render_tree_combiner_;
+  RenderTreeCombiner render_tree_combiner_;
   scoped_ptr<RenderTreeCombiner::Layer> main_web_module_layer_;
   scoped_ptr<RenderTreeCombiner::Layer> debug_console_layer_;
   scoped_ptr<RenderTreeCombiner::Layer> splash_screen_layer_;
@@ -423,6 +424,9 @@
   // which could occur on navigation.
   base::Closure web_module_recreated_callback_;
 
+  // The total number of navigations that have occurred.
+  int navigate_count_;
+
   // The time when a URL navigation starts. This is recorded after the previous
   // WebModule is destroyed.
   base::CVal<int64> navigate_time_;
diff --git a/src/cobalt/browser/switches.cc b/src/cobalt/browser/switches.cc
index 4d028b2..12bbc04 100644
--- a/src/cobalt/browser/switches.cc
+++ b/src/cobalt/browser/switches.cc
@@ -26,6 +26,13 @@
 // Switches different debug console modes: on | hud | off
 const char kDebugConsoleMode[] = "debug_console";
 
+// Enables/disables animations on animated images (e.g. animated WebP).
+const char kDisableImageAnimations[] = "disable_image_animations";
+
+// Disables the splash screen on reloads; instead it will only appear on the
+// first navigate.
+const char kDisableSplashScreenOnReloads[] = "disable_splash_screen_on_reloads";
+
 // Do not create the WebDriver server.
 const char kDisableWebDriver[] = "disable_webdriver";
 
@@ -119,9 +126,6 @@
 // Enables memory tracking by installing the memory tracker on startup.
 const char kMemoryTracker[] = "memory_tracker";
 
-// Enables/disables animations on animated images (e.g. animated WebP).
-const char kDisableImageAnimations[] = "disable_image_animations";
-
 #endif  // ENABLE_DEBUG_COMMAND_LINE_SWITCHES
 
 // If toggled, framerate statistics will be printed to stdout after each
diff --git a/src/cobalt/browser/switches.h b/src/cobalt/browser/switches.h
index c9edfc3..dd36528 100644
--- a/src/cobalt/browser/switches.h
+++ b/src/cobalt/browser/switches.h
@@ -22,6 +22,8 @@
 #if defined(ENABLE_DEBUG_COMMAND_LINE_SWITCHES)
 extern const char kAudioDecoderStub[];
 extern const char kDebugConsoleMode[];
+extern const char kDisableImageAnimations[];
+extern const char kDisableSplashScreenOnReloads[];
 extern const char kDisableWebDriver[];
 extern const char kDisableWebmVp9[];
 extern const char kExtraWebFileDir[];
@@ -44,7 +46,6 @@
 extern const char kVideoDecoderStub[];
 extern const char kWebDriverListenIp[];
 extern const char kWebDriverPort[];
-extern const char kDisableImageAnimations[];
 #endif  // ENABLE_DEBUG_COMMAND_LINE_SWITCHES
 
 extern const char kDisableNavigationWhitelist[];
diff --git a/src/cobalt/build/build.id b/src/cobalt/build/build.id
index 3e535a7..36f609f 100644
--- a/src/cobalt/build/build.id
+++ b/src/cobalt/build/build.id
@@ -1 +1 @@
-102542
\ No newline at end of file
+103164
\ No newline at end of file
diff --git a/src/cobalt/build/build_config.h b/src/cobalt/build/build_config.h
index e743e5f..527f9bc 100644
--- a/src/cobalt/build/build_config.h
+++ b/src/cobalt/build/build_config.h
@@ -51,11 +51,10 @@
         //     COBALT_MEDIA_BUFFER_VIDEO_BUDGET_1080P
 
 #if COBALT_ENCRYPTED_MEDIA_EXTENSION_ENABLE_KEY_STATUSES_UPDATE
-#if SB_API_VERSION < SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#if SB_API_VERSION < 6
 #error COBALT_ENCRYPTED_MEDIA_EXTENSION_ENABLE_KEY_STATUSES_UPDATE requires \
-           that SB_API_VERSION is greater than or equal to \
-           SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
-#endif  // SB_API_VERSION < SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+           that SB_API_VERSION is greater than or equal to 6
+#endif  // SB_API_VERSION < 6
 #endif  // COBALT_ENCRYPTED_MEDIA_EXTENSION_ENABLE_KEY_STATUSES_UPDATE
 
 #endif  // COBALT_BUILD_BUILD_CONFIG_H_
diff --git a/src/cobalt/build/config/base.gypi b/src/cobalt/build/config/base.gypi
index 1f837c1..867adb5 100644
--- a/src/cobalt/build/config/base.gypi
+++ b/src/cobalt/build/config/base.gypi
@@ -466,11 +466,14 @@
     # as expected, rather than requiring it to be set for each platform.
     #'javascript_engine%': 'mozjs-45',
 
-    # Disable jit and run in interpreter-only mode by default. It can be set to
-    # 1 to run in jit mode.  We have found that disabling jit often results in
-    # faster JavaScript execution and lower memory usage.
+    # Disable JIT and run in interpreter-only mode by default. It can be set
+    # to 1 to run in JIT mode.  For SpiderMonkey in particular, we have found
+    # that disabling JIT often results in faster JavaScript execution and
+    # lower memory usage.
     # Setting this to 1 on a platform or engine for which there is no JIT
     # implementation is a no-op.
+    # Setting this to 0 on an engine for which there is a JIT implementation
+    # is a platform configuration error.
     'cobalt_enable_jit%': 0,
 
     # Can be set to enable zealous garbage collection, if |javascript_engine|
diff --git a/src/cobalt/dom/eme/media_key_session.cc b/src/cobalt/dom/eme/media_key_session.cc
index b2d8205..11c2f98 100644
--- a/src/cobalt/dom/eme/media_key_session.cc
+++ b/src/cobalt/dom/eme/media_key_session.cc
@@ -37,11 +37,11 @@
     : ALLOW_THIS_IN_INITIALIZER_LIST(event_queue_(this)),
       drm_system_(drm_system),
       drm_system_session_(drm_system->CreateSession(
-#if SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
           base::Bind(&MediaKeySession::OnSessionUpdateKeyStatuses,
                      base::AsWeakPtr(this))
-#endif  // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
-              )),
+#endif  // SB_API_VERSION >= 6
+                     )),
       script_value_factory_(script_value_factory),
       uninitialized_(true),
       callable_(false),
diff --git a/src/cobalt/input/input_device_manager_desktop.cc b/src/cobalt/input/input_device_manager_desktop.cc
index d49fb15..983da10 100644
--- a/src/cobalt/input/input_device_manager_desktop.cc
+++ b/src/cobalt/input/input_device_manager_desktop.cc
@@ -77,7 +77,7 @@
                    static_cast<uint32_t>(kSbKeyModifiersShift) ==
                        system_window::InputEvent::kShiftKey,
                Mismatched_modifier_enums);
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
 COMPILE_ASSERT(static_cast<uint32_t>(kSbKeyModifiersPointerButtonLeft) ==
                        system_window::InputEvent::kLeftButton &&
                    static_cast<uint32_t>(kSbKeyModifiersPointerButtonRight) ==
@@ -89,7 +89,7 @@
                    static_cast<uint32_t>(kSbKeyModifiersPointerButtonForward) ==
                        system_window::InputEvent::kForwardButton,
                Mismatched_modifier_enums);
-#endif
+#endif  // SB_API_VERSION >= 6
 
 void UpdateEventModifierInit(const system_window::InputEvent* input_event,
                              EventModifierInit* event) {
@@ -221,7 +221,7 @@
       break;
   }
   pointer_event.set_pointer_id(input_event->device_id());
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
   pointer_event.set_width(value_or(input_event->size().x(), 0.0f));
   pointer_event.set_height(value_or(input_event->size().y(), 0.0f));
   pointer_event.set_pressure(value_or(input_event->pressure(),
@@ -230,7 +230,7 @@
       value_or(static_cast<float>(input_event->tilt().x()), 0.0f));
   pointer_event.set_tilt_y(
       value_or(static_cast<float>(input_event->tilt().y()), 0.0f));
-#endif
+#endif  // SB_API_VERSION >= 6
   pointer_event.set_is_primary(true);
   pointer_event_callback_.Run(type, pointer_event);
 }
diff --git a/src/cobalt/media/base/drm_system.cc b/src/cobalt/media/base/drm_system.cc
index c3f4d23..8b5516b 100644
--- a/src/cobalt/media/base/drm_system.cc
+++ b/src/cobalt/media/base/drm_system.cc
@@ -20,7 +20,7 @@
 namespace cobalt {
 namespace media {
 
-#if SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
 DrmSystem::Session::Session(
     DrmSystem* drm_system,
     SessionUpdateKeyStatusesCallback update_key_statuses_callback)
@@ -29,10 +29,10 @@
       closed_(false) {
   DCHECK(!update_key_statuses_callback_.is_null());
 }
-#else   // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#else   // SB_API_VERSION >= 6
 DrmSystem::Session::Session(DrmSystem* drm_system)
     : drm_system_(drm_system), closed_(false) {}
-#endif  // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
 DrmSystem::Session::~Session() {
   if (id_ && !closed_) {
@@ -77,10 +77,10 @@
     : wrapped_drm_system_(SbDrmCreateSystem(key_system, this,
                                             OnSessionUpdateRequestGeneratedFunc,
                                             OnSessionUpdatedFunc
-#if SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
                                             ,
                                             OnSessionKeyStatusesChangedFunc
-#endif  // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#endif  // SB_API_VERSION >= 6
                                             )),
       message_loop_(MessageLoop::current()),
       ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)),
@@ -92,17 +92,17 @@
 
 DrmSystem::~DrmSystem() { SbDrmDestroySystem(wrapped_drm_system_); }
 
-#if SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
 scoped_ptr<DrmSystem::Session> DrmSystem::CreateSession(
     SessionUpdateKeyStatusesCallback session_update_key_statuses_callback) {
   return make_scoped_ptr(
       new Session(this, session_update_key_statuses_callback));
 }
-#else   // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#else   // SB_API_VERSION >= 6
 scoped_ptr<DrmSystem::Session> DrmSystem::CreateSession() {
   return make_scoped_ptr(new Session(this));
 }
-#endif  // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
 void DrmSystem::GenerateSessionUpdateRequest(
     Session* session, const std::string& type, const uint8_t* init_data,
@@ -226,7 +226,7 @@
   ticket_to_session_update_map_.erase(session_update_iterator);
 }
 
-#if SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
 void DrmSystem::OnSessionKeyStatusChanged(
     const std::string& session_id, const std::vector<std::string>& key_ids,
     const std::vector<SbDrmKeyStatus>& key_statuses) {
@@ -241,7 +241,7 @@
 
   session->update_key_statuses_callback().Run(key_ids, key_statuses);
 }
-#endif  // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
 // static
 void DrmSystem::OnSessionUpdateRequestGeneratedFunc(
@@ -283,7 +283,7 @@
                             drm_system->weak_this_, ticket, succeeded));
 }
 
-#if SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
 // static
 void DrmSystem::OnSessionKeyStatusesChangedFunc(
     SbDrmSystem wrapped_drm_system, void* context, const void* session_id,
@@ -315,7 +315,7 @@
       base::Bind(&DrmSystem::OnSessionKeyStatusChanged, drm_system->weak_this_,
                  session_id_copy, key_ids_copy, key_statuses_copy));
 }
-#endif  // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
 }  // namespace media
 }  // namespace cobalt
diff --git a/src/cobalt/media/base/drm_system.h b/src/cobalt/media/base/drm_system.h
index b0a26ff..f60ad9d 100644
--- a/src/cobalt/media/base/drm_system.h
+++ b/src/cobalt/media/base/drm_system.h
@@ -40,11 +40,11 @@
   typedef base::Callback<void()> SessionUpdateRequestDidNotGenerateCallback;
   typedef base::Callback<void()> SessionUpdatedCallback;
   typedef base::Callback<void()> SessionDidNotUpdateCallback;
-#if SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
   typedef base::Callback<void(const std::vector<std::string>& key_ids,
                               const std::vector<SbDrmKeyStatus>& key_statuses)>
       SessionUpdateKeyStatusesCallback;
-#endif  // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
   // Flyweight that provides RAII semantics for sessions.
   // Most of logic is implemented by |DrmSystem| and thus sessions must be
@@ -89,31 +89,31 @@
    private:
     // Private API for |DrmSystem|.
     Session(DrmSystem* drm_system
-#if SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
             ,
             SessionUpdateKeyStatusesCallback update_key_statuses_callback
-#endif  // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#endif  // SB_API_VERSION >= 6
             );  // NOLINT(whitespace/parens)
     void set_id(const std::string& id) { id_ = id; }
     const SessionUpdateRequestGeneratedCallback&
     update_request_generated_callback() const {
       return update_request_generated_callback_;
     }
-#if SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
     const SessionUpdateKeyStatusesCallback& update_key_statuses_callback()
         const {
       return update_key_statuses_callback_;
     }
-#endif  // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
     DrmSystem* const drm_system_;
     bool closed_;
     base::optional<std::string> id_;
     // Supports spontaneous invocations of |SbDrmSessionUpdateRequestFunc|.
     SessionUpdateRequestGeneratedCallback update_request_generated_callback_;
-#if SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
     SessionUpdateKeyStatusesCallback update_key_statuses_callback_;
-#endif  // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
     friend class DrmSystem;
 
@@ -126,9 +126,9 @@
   SbDrmSystem wrapped_drm_system() { return wrapped_drm_system_; }
 
   scoped_ptr<Session> CreateSession(
-#if SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
       SessionUpdateKeyStatusesCallback session_update_key_statuses_callback
-#endif  // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#endif  // SB_API_VERSION >= 6
       );  // NOLINT(whitespace/parens)
 
  private:
@@ -169,11 +169,11 @@
       int ticket, const base::optional<std::string>& session_id,
       scoped_array<uint8> message, int message_size);
   void OnSessionUpdated(int ticket, bool succeeded);
-#if SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
   void OnSessionKeyStatusChanged(
       const std::string& session_id, const std::vector<std::string>& key_ids,
       const std::vector<SbDrmKeyStatus>& key_statuses);
-#endif  // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
   // Called on any thread, parameters need to be copied immediately.
   static void OnSessionUpdateRequestGeneratedFunc(
@@ -184,12 +184,12 @@
                                    void* context, int ticket,
                                    const void* session_id,
                                    int session_id_length, bool succeeded);
-#if SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
   static void OnSessionKeyStatusesChangedFunc(
       SbDrmSystem wrapped_drm_system, void* context, const void* session_id,
       int session_id_size, int number_of_keys, const SbDrmKeyId* key_ids,
       const SbDrmKeyStatus* key_statuses);
-#endif  // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
   const SbDrmSystem wrapped_drm_system_;
   MessageLoop* const message_loop_;
diff --git a/src/cobalt/media/base/sbplayer_pipeline.cc b/src/cobalt/media/base/sbplayer_pipeline.cc
index bf397d8..4844a7d 100644
--- a/src/cobalt/media/base/sbplayer_pipeline.cc
+++ b/src/cobalt/media/base/sbplayer_pipeline.cc
@@ -705,7 +705,7 @@
 void SbPlayerPipeline::OnDemuxerSeeked(PipelineStatus status) {
   DCHECK(message_loop_->BelongsToCurrentThread());
 
-  if (status == PIPELINE_OK) {
+  if (status == PIPELINE_OK && player_) {
     player_->Seek(seek_time_);
   }
 }
diff --git a/src/cobalt/media/base/starboard_player.cc b/src/cobalt/media/base/starboard_player.cc
index 68bb5ec..4582565 100644
--- a/src/cobalt/media/base/starboard_player.cc
+++ b/src/cobalt/media/base/starboard_player.cc
@@ -185,12 +185,12 @@
   }
 
   SbPlayerWriteSample(player_, DemuxerStreamTypeToSbMediaType(type),
-#if SB_API_VERSION >= SB_PLAYER_WRITE_SAMPLE_EXTRA_CONST_API_VERSION
+#if SB_API_VERSION >= 6
                       allocations.buffers(), allocations.buffer_sizes(),
-#else   // SB_API_VERSION >= SB_PLAYER_WRITE_SAMPLE_EXTRA_CONST_API_VERSION
+#else   // SB_API_VERSION >= 6
                       const_cast<const void**>(allocations.buffers()),
                       const_cast<int*>(allocations.buffer_sizes()),
-#endif  // SB_API_VERSION >= SB_PLAYER_WRITE_SAMPLE_EXTRA_CONST_API_VERSION
+#endif  // SB_API_VERSION >= 6
                       allocations.number_of_buffers(),
                       TimeDeltaToSbMediaTime(buffer->timestamp()),
                       type == DemuxerStream::VIDEO ? &video_info : NULL,
diff --git a/src/cobalt/media/base/starboard_utils.cc b/src/cobalt/media/base/starboard_utils.cc
index f184538..b5cf1c6 100644
--- a/src/cobalt/media/base/starboard_utils.cc
+++ b/src/cobalt/media/base/starboard_utils.cc
@@ -68,7 +68,7 @@
   audio_header.block_alignment = 4;
   audio_header.bits_per_sample = audio_decoder_config.bits_per_channel();
 
-#if SB_API_VERSION >= SB_AUDIO_SPECIFIC_CONFIG_AS_POINTER
+#if SB_API_VERSION >= 6
   audio_header.audio_specific_config_size =
       static_cast<uint16_t>(audio_decoder_config.extra_data().size());
   if (audio_header.audio_specific_config_size == 0) {
@@ -76,7 +76,7 @@
   } else {
     audio_header.audio_specific_config = &audio_decoder_config.extra_data()[0];
   }
-#else   // SB_API_VERSION >= SB_AUDIO_SPECIFIC_CONFIG_AS_POINTER
+#else   // SB_API_VERSION >= 6
   audio_header.audio_specific_config_size = static_cast<uint16_t>(
       std::min(audio_decoder_config.extra_data().size(),
                sizeof(audio_header.audio_specific_config)));
@@ -85,7 +85,7 @@
                  &audio_decoder_config.extra_data()[0],
                  audio_header.audio_specific_config_size);
   }
-#endif  // SB_API_VERSION >= SB_AUDIO_SPECIFIC_CONFIG_AS_POINTER
+#endif  // SB_API_VERSION >= 6
 
   return audio_header;
 }
diff --git a/src/cobalt/renderer/rasterizer/egl/hardware_rasterizer.cc b/src/cobalt/renderer/rasterizer/egl/hardware_rasterizer.cc
index 6043afa..f845dc8 100644
--- a/src/cobalt/renderer/rasterizer/egl/hardware_rasterizer.cc
+++ b/src/cobalt/renderer/rasterizer/egl/hardware_rasterizer.cc
@@ -139,6 +139,13 @@
   backend::RenderTargetEGL* render_target_egl =
       base::polymorphic_downcast<backend::RenderTargetEGL*>(
           render_target.get());
+
+  // Skip rendering if we lost the surface. This can happen just before suspend
+  // on Android, so now we're just waiting for the suspend to clean up.
+  if (render_target_egl->is_surface_bad()) {
+    return;
+  }
+
   backend::GraphicsContextEGL::ScopedMakeCurrent scoped_make_current(
       graphics_context_, render_target_egl);
 
diff --git a/src/cobalt/renderer/rasterizer/egl/textured_mesh_renderer.cc b/src/cobalt/renderer/rasterizer/egl/textured_mesh_renderer.cc
index 8df6fd1..0812b2e 100644
--- a/src/cobalt/renderer/rasterizer/egl/textured_mesh_renderer.cc
+++ b/src/cobalt/renderer/rasterizer/egl/textured_mesh_renderer.cc
@@ -489,7 +489,7 @@
       } break;
       case Image::YUV_2PLANE_BT709: {
         std::vector<TextureInfo> texture_infos;
-#if SB_API_VERSION >= SB_DECODE_TARGET_FORMAT_VERSION
+#if SB_API_VERSION >= SB_DECODE_TARGET_PLANE_FORMAT_VERSION
         switch (image.textures[0].texture->GetFormat()) {
           case GL_ALPHA:
             texture_infos.push_back(TextureInfo("y", "a"));
@@ -514,10 +514,10 @@
           default:
             NOTREACHED();
         }
-#else  // SB_API_VERSION >= SB_DECODE_TARGET_FORMAT_VERSION
+#else  // SB_API_VERSION >= SB_DECODE_TARGET_PLANE_FORMAT_VERSION
         texture_infos.push_back(TextureInfo("y", "a"));
         texture_infos.push_back(TextureInfo("uv", "ba"));
-#endif  // SB_API_VERSION >= SB_DECODE_TARGET_FORMAT_VERSION
+#endif  // SB_API_VERSION >= SB_DECODE_TARGET_PLANE_FORMAT_VERSION
         result = MakeBlitProgram(
             color_matrix, texture_infos,
             CreateFragmentShader(texture_target, texture_infos));
diff --git a/src/cobalt/renderer/rasterizer/skia/hardware_resource_provider.cc b/src/cobalt/renderer/rasterizer/skia/hardware_resource_provider.cc
index ce39cca..e7e9075 100644
--- a/src/cobalt/renderer/rasterizer/skia/hardware_resource_provider.cc
+++ b/src/cobalt/renderer/rasterizer/skia/hardware_resource_provider.cc
@@ -149,13 +149,10 @@
 #if SB_HAS(GRAPHICS)
 namespace {
 
-#if SB_API_VERSION < SB_DECODE_TARGET_PLANES_FOR_FORMAT
+#if SB_API_VERSION < 6
 int PlanesPerFormat(SbDecodeTargetFormat format) {
   switch (format) {
     case kSbDecodeTargetFormat1PlaneRGBA:
-#if SB_API_VERSION >= SB_DECODE_TARGET_UYVY_SUPPORT_API_VERSION
-    case kSbDecodeTargetFormat1PlaneUYVY:
-#endif  // SB_API_VERSION >= SB_DECODE_TARGET_UYVY_SUPPORT_API_VERSION
       return 1;
     case kSbDecodeTargetFormat1PlaneBGRA:
       return 1;
@@ -168,26 +165,26 @@
       return 0;
   }
 }
-#endif  // SB_API_VERSION < SB_DECODE_TARGET_PLANES_FOR_FORMAT
+#endif  // SB_API_VERSION < 6
 
 uint32_t DecodeTargetFormatToGLFormat(SbDecodeTargetFormat format, int plane,
     const SbDecodeTargetInfoPlane* plane_info) {
   switch (format) {
     case kSbDecodeTargetFormat1PlaneRGBA:
-#if SB_API_VERSION >= SB_DECODE_TARGET_UYVY_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
     // For UYVY, we will use a fragment shader where R = the first U, G = Y,
     // B = the second U, and A = V.
     case kSbDecodeTargetFormat1PlaneUYVY:
-#endif  // SB_API_VERSION >= SB_DECODE_TARGET_UYVY_SUPPORT_API_VERSION
+#endif  // SB_API_VERSION >= 6
     {
       DCHECK_EQ(0, plane);
       return GL_RGBA;
     } break;
     case kSbDecodeTargetFormat2PlaneYUVNV12: {
       DCHECK_LT(plane, 2);
-#if SB_API_VERSION >= SB_DECODE_TARGET_FORMAT_VERSION
+#if SB_API_VERSION >= SB_DECODE_TARGET_PLANE_FORMAT_VERSION
       // If this DCHECK fires, please set gl_texture_format, introduced
-      // in Starboard SB_DECODE_TARGET_FORMAT_VERSION.
+      // in Starboard SB_DECODE_TARGET_PLANE_FORMAT_VERSION.
       //
       // You probably want to set it to GL_ALPHA on plane 0 (luma) and
       // GL_LUMINANCE_ALPHA on plane 1 (chroma), which was the default before.
@@ -209,7 +206,7 @@
           CHECK(false);
           return 0;
       }
-#else  // SB_API_VERSION >= SB_DECODE_TARGET_FORMAT_VERSION
+#else  // SB_API_VERSION >= SB_DECODE_TARGET_PLANE_FORMAT_VERSION
       switch (plane) {
         case 0:
           return GL_ALPHA;
@@ -219,7 +216,7 @@
           NOTREACHED();
           return GL_RGBA;
       }
-#endif  // SB_API_VERSION >= SB_DECODE_TARGET_FORMAT_VERSION
+#endif  // SB_API_VERSION >= SB_DECODE_TARGET_PLANE_FORMAT_VERSION
     } break;
     case kSbDecodeTargetFormat3PlaneYUVI420: {
       DCHECK_LT(plane, 3);
@@ -283,11 +280,11 @@
       new DecodeTargetReferenceCounted(decode_target));
 
   // There is limited format support at this time.
-#if SB_API_VERSION >= SB_DECODE_TARGET_PLANES_FOR_FORMAT
+#if SB_API_VERSION >= 6
   int planes_per_format = SbDecodeTargetNumberOfPlanesForFormat(info.format);
 #else
   int planes_per_format = PlanesPerFormat(info.format);
-#endif  // SB_API_VERSION >= SB_DECODE_TARGET_PLANES_FOR_FORMAT
+#endif  // SB_API_VERSION >= 6
 
   for (int i = 0; i < planes_per_format; ++i) {
     const SbDecodeTargetInfoPlane& plane = info.planes[i];
@@ -318,11 +315,11 @@
     // this in as supplementary data, as the |texture| object only knows that
     // it is RGBA.
     base::optional<AlternateRgbaFormat> alternate_rgba_format;
-#if SB_API_VERSION >= SB_DECODE_TARGET_UYVY_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
     if (info.format == kSbDecodeTargetFormat1PlaneUYVY) {
       alternate_rgba_format = AlternateRgbaFormat_UYVY;
     }
-#endif  // SB_API_VERSION >= SB_DECODE_TARGET_UYVY_SUPPORT_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
     planes.push_back(make_scoped_refptr(new HardwareFrontendImage(
         texture.Pass(), alpha_format, cobalt_context_, gr_context_,
diff --git a/src/cobalt/script/engine.gyp b/src/cobalt/script/engine.gyp
index d5423b8..342bcb5 100644
--- a/src/cobalt/script/engine.gyp
+++ b/src/cobalt/script/engine.gyp
@@ -22,8 +22,9 @@
       'sources': [
         'javascript_engine.h',
       ],
-      'dependencies': [
-        '<(javascript_engine)/<(javascript_engine).gyp:engine',
+      'conditions': [
+        [ 'javascript_engine == "mozjs-45"', { 'dependencies': ['mozjs-45/mozjs-45.gyp:engine', ], }, ],
+        [ 'javascript_engine == "v8"', { 'dependencies': ['v8c/v8c.gyp:engine', ], }, ],
       ],
     },
     {
diff --git a/src/cobalt/script/engine_variables.gypi b/src/cobalt/script/engine_variables.gypi
index d60625c..54fe07e 100644
--- a/src/cobalt/script/engine_variables.gypi
+++ b/src/cobalt/script/engine_variables.gypi
@@ -15,5 +15,6 @@
 {
   'includes': [
     'mozjs-45/mozjs-45_variables.gypi',
+    'v8c/v8c_variables.gypi',
   ],
 }
diff --git a/src/cobalt/script/global_environment.h b/src/cobalt/script/global_environment.h
index 039f05d..9676f73 100644
--- a/src/cobalt/script/global_environment.h
+++ b/src/cobalt/script/global_environment.h
@@ -92,7 +92,8 @@
   virtual void EnableEval() = 0;
 
   // Disable just-in-time compilation of JavaScript source code to native
-  // code.  Calling this is a no-op if JIT was not enabled in the first place.
+  // code.  Calling this is a no-op if JIT was not enabled in the first place,
+  // or if the engine does not support disabling JIT.
   virtual void DisableJit() = 0;
 
   // Set a callback that will be fired whenever eval() or a Function()
diff --git a/src/cobalt/script/v8c/v8c.cc b/src/cobalt/script/v8c/v8c.cc
new file mode 100644
index 0000000..993cc58
--- /dev/null
+++ b/src/cobalt/script/v8c/v8c.cc
@@ -0,0 +1,119 @@
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include <iostream>
+
+#include "base/command_line.h"
+#include "base/file_path.h"
+#include "base/string_util.h"
+#include "cobalt/base/wrap_main.h"
+#include "cobalt/script/source_code.h"
+#include "cobalt/script/standalone_javascript_runner.h"
+#include "cobalt/script/v8c/v8c_global_environment.h"
+#include "v8/include/libplatform/libplatform.h"
+#include "v8/include/v8.h"
+
+namespace cobalt {
+namespace script {
+namespace v8c {
+namespace {
+
+void Print(const v8::FunctionCallbackInfo<v8::Value>& args) {
+  v8::Isolate* isolate = args.GetIsolate();
+  v8::HandleScope scope(isolate);
+
+  std::vector<std::string> string_args;
+  for (int i = 0; i < args.Length(); i++) {
+    v8::TryCatch try_catch(args.GetIsolate());
+    v8::Local<v8::Value> arg = args[i];
+    v8::Local<v8::String> string;
+
+    if (arg->IsSymbol()) {
+      arg = v8::Local<v8::Symbol>::Cast(arg)->Name();
+    }
+    if (!arg->ToString(args.GetIsolate()->GetCurrentContext())
+             .ToLocal(&string)) {
+      try_catch.ReThrow();
+      return;
+    }
+
+    v8::String::Utf8Value utf8_value(args.GetIsolate(), string);
+    string_args.push_back(*utf8_value);
+  }
+
+  std::string joined = JoinString(string_args, ' ');
+  std::cout << joined << std::endl;
+}
+
+void SetupBindings(GlobalEnvironment* global_environment) {
+  V8cGlobalEnvironment* v8c_global_environment =
+      static_cast<V8cGlobalEnvironment*>(global_environment);
+  v8::Isolate* isolate = v8c_global_environment->isolate();
+  v8::Isolate::Scope isolate_scope(isolate);
+  v8::HandleScope handle_scope(isolate);
+  auto context = v8c_global_environment->context();
+  v8::Context::Scope context_scope(context);
+  context->Global()->Set(
+      v8::String::NewFromUtf8(isolate, "print", v8::NewStringType::kNormal)
+          .ToLocalChecked(),
+      v8::Function::New(isolate, Print));
+}
+
+int V8cMain(int argc, char** argv) {
+  cobalt::script::StandaloneJavascriptRunner standalone_runner;
+  GlobalEnvironment* global_environment =
+      standalone_runner.global_environment().get();
+  SetupBindings(global_environment);
+  if (argc > 1) {
+    // Command line arguments will be flag-value pairs of the form
+    // -f filename
+    // and
+    // -e "inline script"
+    // and will be evaluated in order.
+    for (int i = 1; (i + 1) < argc; ++i) {
+      if (std::string(argv[i]) == "-f") {
+        std::string filename = std::string(argv[i + 1]);
+        // Execute source file.
+        FilePath source_file(filename);
+        standalone_runner.ExecuteFile(source_file);
+        ++i;
+      } else if (std::string(argv[i]) == "-e") {
+        // Execute inline script.
+        scoped_refptr<SourceCode> source = SourceCode::CreateSourceCode(
+            argv[i + 1], base::SourceLocation("[stdin]", 1, 1));
+
+        // Execute the script and get the results of execution.
+        std::string result;
+        bool success = global_environment->EvaluateScript(source, &result);
+        // Echo the results to stdout.
+        if (!success) {
+          std::cout << "Exception: ";
+        }
+        std::cout << result << std::endl;
+        ++i;
+      }
+    }
+  } else {
+    standalone_runner.RunInteractive();
+  }
+
+  return 0;
+}
+
+}  // namespace
+}  // namespace v8c
+}  // namespace script
+}  // namespace cobalt
+
+COBALT_WRAP_SIMPLE_MAIN(cobalt::script::v8c::V8cMain);
diff --git a/src/cobalt/script/v8c/v8c.gyp b/src/cobalt/script/v8c/v8c.gyp
new file mode 100644
index 0000000..dc9b560
--- /dev/null
+++ b/src/cobalt/script/v8c/v8c.gyp
@@ -0,0 +1,70 @@
+# Copyright 2017 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+{
+  'targets': [
+    {
+      'target_name': 'engine',
+      'type': 'static_library',
+      'sources': [
+        'v8c_engine.cc',
+        'v8c_engine.h',
+        'v8c_global_environment.cc',
+        'v8c_global_environment.h',
+        'v8c_source_code.cc',
+        'v8c_source_code.h',
+      ],
+      'dependencies': [
+        '<(DEPTH)/v8/src/v8.gyp:v8',
+        '<(DEPTH)/v8/src/v8.gyp:v8_libplatform',
+      ],
+      'defines': [
+        'ENGINE_SUPPORTS_INT64',
+        'ENGINE_SUPPORTS_JIT',
+      ],
+      'all_dependent_settings': {
+        'defines': [
+          'ENGINE_SUPPORTS_INDEXED_DELETERS',
+          'ENGINE_SUPPORTS_INT64',
+          'ENGINE_SUPPORTS_STACK_TRACE_COLUMNS',
+          # TODO: Remove this when exact rooting and generational GC is enabled.
+          'ENGINE_USES_CONSERVATIVE_ROOTING',
+        ],
+      },
+      # V8 always requires JIT.  |cobalt_enable_jit| must be set to true to
+      # use V8.  Failure to do will result in a build failure.
+      'conditions' :[
+        ['cobalt_enable_jit == 0', {
+          'defines': [ '<(gyp_static_assert_false)', ],
+        }],
+      ],
+    },
+
+    {
+      # Standalone shell executable for V8 within Cobalt.
+      'target_name': 'v8c',
+      'type': '<(final_executable_type)',
+      'sources': [
+        'v8c.cc',
+      ],
+      'dependencies': [
+        ':engine',
+        '<(DEPTH)/cobalt/base/base.gyp:base',
+        '<(DEPTH)/cobalt/script/script.gyp:standalone_javascript_runner',
+        '<(DEPTH)/v8/src/v8.gyp:v8',
+        '<(DEPTH)/v8/src/v8.gyp:v8_libplatform',
+      ],
+    },
+  ],
+}
diff --git a/src/cobalt/script/v8c/v8c_engine.cc b/src/cobalt/script/v8c/v8c_engine.cc
new file mode 100644
index 0000000..2c928bc
--- /dev/null
+++ b/src/cobalt/script/v8c/v8c_engine.cc
@@ -0,0 +1,147 @@
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "cobalt/script/v8c/v8c_engine.h"
+
+#include <algorithm>
+#include <string>
+
+#include "base/debug/trace_event.h"
+#include "base/logging.h"
+#include "base/message_loop.h"
+#include "cobalt/base/c_val.h"
+#include "cobalt/browser/stack_size_constants.h"
+#include "cobalt/script/v8c/v8c_global_environment.h"
+#include "starboard/once.h"
+#include "v8/include/libplatform/libplatform.h"
+#include "v8/include/v8.h"
+
+namespace cobalt {
+namespace script {
+
+namespace v8c {
+namespace {
+
+// Trigger garbage collection this many seconds after the last one.
+const int kGarbageCollectionIntervalSeconds = 60;
+
+SbOnceControl g_js_init_once_control = SB_ONCE_INITIALIZER;
+v8::Platform* g_platform = nullptr;
+v8::ArrayBuffer::Allocator* g_array_buffer_allocator = nullptr;
+
+void ShutDown(void*) {
+  v8::V8::Dispose();
+  v8::V8::ShutdownPlatform();
+
+  DCHECK(g_platform);
+  delete g_platform;
+  g_platform = nullptr;
+
+  DCHECK(g_array_buffer_allocator);
+  delete g_array_buffer_allocator;
+  g_array_buffer_allocator = nullptr;
+}
+
+void InitializeAndRegisterShutDownOnce() {
+  // TODO: Initialize V8 ICU stuff here as well.
+  g_platform = v8::platform::CreateDefaultPlatform();
+  v8::V8::InitializePlatform(g_platform);
+  v8::V8::Initialize();
+  g_array_buffer_allocator = v8::ArrayBuffer::Allocator::NewDefaultAllocator();
+
+  base::AtExitManager::RegisterCallback(ShutDown, nullptr);
+}
+
+}  // namespace
+
+V8cEngine::V8cEngine(const Options& options)
+    : accumulated_extra_memory_cost_(0), options_(options) {
+  TRACE_EVENT0("cobalt::script", "V8cEngine::V8cEngine()");
+  SbOnce(&g_js_init_once_control, InitializeAndRegisterShutDownOnce);
+  DCHECK(g_platform);
+  DCHECK(g_array_buffer_allocator);
+
+  v8::Isolate::CreateParams params;
+  params.array_buffer_allocator = g_array_buffer_allocator;
+
+  isolate_ = v8::Isolate::New(params);
+  CHECK(isolate_);
+
+  if (MessageLoop::current()) {
+    gc_timer_.Start(
+        FROM_HERE,
+        base::TimeDelta::FromSeconds(kGarbageCollectionIntervalSeconds), this,
+        &V8cEngine::TimerGarbageCollect);
+  }
+}
+
+V8cEngine::~V8cEngine() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  isolate_->Dispose();
+  isolate_ = nullptr;
+}
+
+scoped_refptr<GlobalEnvironment> V8cEngine::CreateGlobalEnvironment() {
+  TRACE_EVENT0("cobalt::script", "V8cEngine::CreateGlobalEnvironment()");
+  DCHECK(thread_checker_.CalledOnValidThread());
+  return new V8cGlobalEnvironment(isolate_);
+}
+
+void V8cEngine::CollectGarbage() {
+  TRACE_EVENT0("cobalt::script", "V8cEngine::CollectGarbage()");
+  DCHECK(thread_checker_.CalledOnValidThread());
+  NOTIMPLEMENTED();
+}
+
+void V8cEngine::ReportExtraMemoryCost(size_t bytes) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  accumulated_extra_memory_cost_ += bytes;
+
+  const bool do_collect_garbage =
+      accumulated_extra_memory_cost_ > options_.gc_threshold_bytes;
+  if (do_collect_garbage) {
+    accumulated_extra_memory_cost_ = 0;
+    CollectGarbage();
+  }
+}
+
+bool V8cEngine::RegisterErrorHandler(JavaScriptEngine::ErrorHandler handler) {
+  error_handler_ = handler;
+  return true;
+}
+
+void V8cEngine::SetGcThreshold(int64_t bytes) { NOTIMPLEMENTED(); }
+
+void V8cEngine::TimerGarbageCollect() {
+  TRACE_EVENT0("cobalt::script", "V8cEngine::TimerGarbageCollect()");
+  CollectGarbage();
+}
+
+}  // namespace v8c
+
+// static
+scoped_ptr<JavaScriptEngine> JavaScriptEngine::CreateEngine(
+    const JavaScriptEngine::Options& options) {
+  TRACE_EVENT0("cobalt::script", "JavaScriptEngine::CreateEngine()");
+  return make_scoped_ptr<JavaScriptEngine>(new v8c::V8cEngine(options));
+}
+
+// static
+size_t JavaScriptEngine::UpdateMemoryStatsAndReturnReserved() {
+  NOTIMPLEMENTED();
+  return 0;
+}
+
+}  // namespace script
+}  // namespace cobalt
diff --git a/src/cobalt/script/v8c/v8c_engine.h b/src/cobalt/script/v8c/v8c_engine.h
new file mode 100644
index 0000000..2962efb
--- /dev/null
+++ b/src/cobalt/script/v8c/v8c_engine.h
@@ -0,0 +1,67 @@
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef COBALT_SCRIPT_V8C_V8C_ENGINE_H_
+#define COBALT_SCRIPT_V8C_V8C_ENGINE_H_
+
+#include <vector>
+
+#include "base/threading/thread_checker.h"
+#include "base/timer.h"
+#include "cobalt/script/javascript_engine.h"
+#include "v8/include/libplatform/libplatform.h"
+#include "v8/include/v8.h"
+
+namespace cobalt {
+namespace script {
+namespace v8c {
+
+class V8cEngine : public JavaScriptEngine {
+ public:
+  explicit V8cEngine(const Options& options);
+  ~V8cEngine() override;
+
+  scoped_refptr<GlobalEnvironment> CreateGlobalEnvironment() override;
+  void CollectGarbage() override;
+  void ReportExtraMemoryCost(size_t bytes) override;
+  bool RegisterErrorHandler(JavaScriptEngine::ErrorHandler handler) override;
+  void SetGcThreshold(int64_t bytes) override;
+
+  v8::Isolate* isolate() const { return isolate_; }
+
+ private:
+  void TimerGarbageCollect();
+
+  base::ThreadChecker thread_checker_;
+
+  // An isolated instance of the V8 engine.
+  v8::Isolate* isolate_;
+
+  // The amount of externally allocated memory since last forced GC.
+  size_t accumulated_extra_memory_cost_;
+
+  // Used to trigger a garbage collection periodically.
+  base::RepeatingTimer<V8cEngine> gc_timer_;
+
+  // Used to handle javascript errors.
+  ErrorHandler error_handler_;
+
+  JavaScriptEngine::Options options_;
+};
+
+}  // namespace v8c
+}  // namespace script
+}  // namespace cobalt
+
+#endif  // COBALT_SCRIPT_V8C_V8C_ENGINE_H_
diff --git a/src/cobalt/script/v8c/v8c_global_environment.cc b/src/cobalt/script/v8c/v8c_global_environment.cc
new file mode 100644
index 0000000..a4d1c6f
--- /dev/null
+++ b/src/cobalt/script/v8c/v8c_global_environment.cc
@@ -0,0 +1,175 @@
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "cobalt/script/v8c/v8c_global_environment.h"
+
+#include <algorithm>
+#include <utility>
+
+#include "base/lazy_instance.h"
+#include "base/stringprintf.h"
+#include "cobalt/base/polymorphic_downcast.h"
+#include "cobalt/script/v8c/v8c_source_code.h"
+#include "nb/memory_scope.h"
+
+namespace cobalt {
+namespace script {
+namespace v8c {
+
+V8cGlobalEnvironment::V8cGlobalEnvironment(v8::Isolate* isolate)
+    : garbage_collection_count_(0),
+      environment_settings_(nullptr),
+      last_error_message_(nullptr),
+      eval_enabled_(false),
+      isolate_(isolate) {
+  TRACK_MEMORY_SCOPE("Javascript");
+  v8::Isolate::Scope isolate_scope(isolate_);
+  v8::HandleScope handle_scope(isolate_);
+  v8::Local<v8::ObjectTemplate> global_object_template;
+  v8::Local<v8::Context> context =
+      v8::Context::New(isolate_, nullptr, global_object_template);
+  context_.Reset(isolate_, context);
+}
+
+V8cGlobalEnvironment::~V8cGlobalEnvironment() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+}
+
+void V8cGlobalEnvironment::CreateGlobalObject() {
+  TRACK_MEMORY_SCOPE("Javascript");
+  DCHECK(thread_checker_.CalledOnValidThread());
+  // TODO: Global object creation happens with context creation in V8.
+  // Strongly consider removing this from the interface.
+  EvaluateAutomatics();
+}
+
+bool V8cGlobalEnvironment::EvaluateScript(
+    const scoped_refptr<SourceCode>& source_code,
+    std::string* out_result_utf8) {
+  TRACK_MEMORY_SCOPE("Javascript");
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  v8::Isolate::Scope isolate_scope(isolate_);
+  v8::HandleScope handle_scope(isolate_);
+  v8::Local<v8::Context> context = context_.Get(isolate_);
+  v8::Context::Scope scope(context);
+
+  v8::TryCatch try_catch(isolate_);
+  // TODO: Also pass in a |v8::ScriptOrigin|.
+  V8cSourceCode* v8c_source_code =
+      base::polymorphic_downcast<V8cSourceCode*>(source_code.get());
+  v8::Local<v8::String> source =
+      v8::String::NewFromUtf8(isolate_, v8c_source_code->source_utf8().c_str(),
+                              v8::NewStringType::kNormal)
+          .ToLocalChecked();
+
+  auto maybe_script = v8::Script::Compile(context, source);
+  v8::Local<v8::Script> script;
+  if (!maybe_script.ToLocal(&script)) {
+    return false;
+  }
+
+  auto maybe_result = script->Run(context);
+  v8::Local<v8::Value> result;
+  if (!maybe_result.ToLocal(&result)) {
+    return false;
+  }
+
+  if (out_result_utf8) {
+    *out_result_utf8 = *v8::String::Utf8Value(isolate_, result);
+  }
+
+  return true;
+}
+
+bool V8cGlobalEnvironment::EvaluateScript(
+    const scoped_refptr<SourceCode>& source_code,
+    const scoped_refptr<Wrappable>& owning_object,
+    base::optional<OpaqueHandleHolder::Reference>* out_opaque_handle) {
+  TRACK_MEMORY_SCOPE("Javascript");
+  DCHECK(thread_checker_.CalledOnValidThread());
+  // TODO: Implement this once we have |V8cObjectHandleHolder|.
+  NOTIMPLEMENTED();
+  return false;
+}
+
+std::vector<StackFrame> V8cGlobalEnvironment::GetStackTrace(int max_frames) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  NOTIMPLEMENTED();
+  return {};
+}
+
+void V8cGlobalEnvironment::PreventGarbageCollection(
+    const scoped_refptr<Wrappable>& wrappable) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  NOTIMPLEMENTED();
+}
+
+void V8cGlobalEnvironment::AllowGarbageCollection(
+    const scoped_refptr<Wrappable>& wrappable) {
+  TRACK_MEMORY_SCOPE("Javascript");
+  DCHECK(thread_checker_.CalledOnValidThread());
+  NOTIMPLEMENTED();
+}
+
+void V8cGlobalEnvironment::DisableEval(const std::string& message) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  eval_disabled_message_.emplace(message);
+  eval_enabled_ = false;
+}
+
+void V8cGlobalEnvironment::EnableEval() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  eval_disabled_message_ = base::nullopt;
+  eval_enabled_ = true;
+}
+
+void V8cGlobalEnvironment::DisableJit() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  SB_DLOG(INFO)
+      << "V8 can only be run with JIT enabled, ignoring |DisableJit| call.";
+}
+
+void V8cGlobalEnvironment::SetReportEvalCallback(
+    const base::Closure& report_eval) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  report_eval_ = report_eval;
+}
+
+void V8cGlobalEnvironment::SetReportErrorCallback(
+    const ReportErrorCallback& report_error_callback) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  report_error_callback_ = report_error_callback;
+}
+
+void V8cGlobalEnvironment::Bind(const std::string& identifier,
+                                const scoped_refptr<Wrappable>& impl) {
+  TRACK_MEMORY_SCOPE("Javascript");
+  NOTIMPLEMENTED();
+}
+
+ScriptValueFactory* V8cGlobalEnvironment::script_value_factory() {
+  NOTIMPLEMENTED();
+  return nullptr;
+}
+
+void V8cGlobalEnvironment::EvaluateAutomatics() {
+  // TODO: Maybe add fetch, stream, and promise polyfills.  Investigate what
+  // V8 has to natively offer first.
+  NOTIMPLEMENTED();
+}
+
+}  // namespace v8c
+}  // namespace script
+}  // namespace cobalt
diff --git a/src/cobalt/script/v8c/v8c_global_environment.h b/src/cobalt/script/v8c/v8c_global_environment.h
new file mode 100644
index 0000000..d60637f
--- /dev/null
+++ b/src/cobalt/script/v8c/v8c_global_environment.h
@@ -0,0 +1,113 @@
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef COBALT_SCRIPT_V8C_V8C_GLOBAL_ENVIRONMENT_H_
+#define COBALT_SCRIPT_V8C_V8C_GLOBAL_ENVIRONMENT_H_
+
+#include <string>
+#include <vector>
+
+#include "base/hash_tables.h"
+#include "base/logging.h"
+#include "base/optional.h"
+#include "base/stl_util.h"
+#include "base/threading/thread_checker.h"
+#include "cobalt/script/global_environment.h"
+#include "cobalt/script/javascript_engine.h"
+#include "v8/include/libplatform/libplatform.h"
+#include "v8/include/v8.h"
+
+namespace cobalt {
+namespace script {
+namespace v8c {
+
+class V8cScriptValueFactory;
+class ReferencedObjectMap;
+class WeakHandle;
+
+// Manages a handle to a JavaScript engine's global object. The lifetime of
+// the global object is not necessarily tied to the lifetime of the proxy.
+class V8cGlobalEnvironment : public GlobalEnvironment,
+                             public Wrappable::CachedWrapperAccessor {
+ public:
+  explicit V8cGlobalEnvironment(v8::Isolate* isolate);
+  ~V8cGlobalEnvironment() override;
+
+  void CreateGlobalObject() override;
+
+  bool EvaluateScript(const scoped_refptr<SourceCode>& script,
+                      std::string* out_result_utf8) override;
+
+  bool EvaluateScript(const scoped_refptr<SourceCode>& script_utf8,
+                      const scoped_refptr<Wrappable>& owning_object,
+                      base::optional<OpaqueHandleHolder::Reference>*
+                          out_opaque_handle) override;
+
+  std::vector<StackFrame> GetStackTrace(int max_frames = 0) override;
+
+  void PreventGarbageCollection(
+      const scoped_refptr<Wrappable>& wrappable) override;
+
+  void AllowGarbageCollection(
+      const scoped_refptr<Wrappable>& wrappable) override;
+
+  void DisableEval(const std::string& message) override;
+
+  void EnableEval() override;
+
+  void DisableJit() override;
+
+  void SetReportEvalCallback(const base::Closure& report_eval) override;
+
+  void SetReportErrorCallback(
+      const ReportErrorCallback& report_error_callback) override;
+
+  void Bind(const std::string& identifier,
+            const scoped_refptr<Wrappable>& impl) override;
+
+  ScriptValueFactory* script_value_factory() override;
+
+  // Evaluates any automatically included Javascript for the environment.
+  void EvaluateAutomatics();
+
+  v8::Isolate* isolate() const { return isolate_; }
+  v8::Local<v8::Context> context() const {
+    return v8::Local<v8::Context>::New(isolate_, context_);
+  }
+
+ private:
+  base::ThreadChecker thread_checker_;
+  v8::Isolate* isolate_;
+  v8::Global<v8::Context> context_;
+  int garbage_collection_count_;
+
+  v8::Global<v8::Object> global_object_;
+
+  EnvironmentSettings* environment_settings_;
+
+  // If non-NULL, the error message from the ReportErrorHandler will get
+  // assigned to this instead of being printed.
+  std::string* last_error_message_;
+
+  bool eval_enabled_;
+  base::optional<std::string> eval_disabled_message_;
+  base::Closure report_eval_;
+  ReportErrorCallback report_error_callback_;
+};
+
+}  // namespace v8c
+}  // namespace script
+}  // namespace cobalt
+
+#endif  // COBALT_SCRIPT_V8C_V8C_GLOBAL_ENVIRONMENT_H_
diff --git a/src/cobalt/script/v8c/v8c_source_code.cc b/src/cobalt/script/v8c/v8c_source_code.cc
new file mode 100644
index 0000000..053da7f
--- /dev/null
+++ b/src/cobalt/script/v8c/v8c_source_code.cc
@@ -0,0 +1,27 @@
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "cobalt/script/v8c/v8c_source_code.h"
+
+namespace cobalt {
+namespace script {
+
+scoped_refptr<SourceCode> SourceCode::CreateSourceCode(
+    const std::string& script_utf8,
+    const base::SourceLocation& script_location) {
+  return new v8c::V8cSourceCode(script_utf8, script_location);
+}
+
+}  // namespace script
+}  // namespace cobalt
diff --git a/src/cobalt/script/v8c/v8c_source_code.h b/src/cobalt/script/v8c/v8c_source_code.h
new file mode 100644
index 0000000..f014afa
--- /dev/null
+++ b/src/cobalt/script/v8c/v8c_source_code.h
@@ -0,0 +1,47 @@
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef COBALT_SCRIPT_V8C_V8C_SOURCE_CODE_H_
+#define COBALT_SCRIPT_V8C_V8C_SOURCE_CODE_H_
+
+#include <string>
+
+#include "cobalt/base/source_location.h"
+#include "cobalt/script/source_code.h"
+
+namespace cobalt {
+namespace script {
+namespace v8c {
+
+// TODO: Consider pre-compiling scripts here.
+// TODO: Also separately consider making this class entirely non-engine
+// specific if no engine is going to do anything special with it.
+class V8cSourceCode : public SourceCode {
+ public:
+  V8cSourceCode(const std::string& source_utf8,
+                const base::SourceLocation& source_location)
+      : source_utf8_(source_utf8), location_(source_location) {}
+  const std::string& source_utf8() const { return source_utf8_; }
+  const base::SourceLocation& location() const { return location_; }
+
+ private:
+  std::string source_utf8_;
+  base::SourceLocation location_;
+};
+
+}  // namespace v8c
+}  // namespace script
+}  // namespace cobalt
+
+#endif  // COBALT_SCRIPT_V8C_V8C_SOURCE_CODE_H_
diff --git a/src/cobalt/script/v8c/v8c_variables.gypi b/src/cobalt/script/v8c/v8c_variables.gypi
new file mode 100644
index 0000000..4348bd4
--- /dev/null
+++ b/src/cobalt/script/v8c/v8c_variables.gypi
@@ -0,0 +1,51 @@
+# Copyright 2017 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+{
+  'variables': {
+    'conditions': [
+      ['javascript_engine == "v8"', {
+        'generated_bindings_prefix': 'v8c',
+        'engine_include_dirs': [],
+        'engine_dependencies': [
+          '<(DEPTH)/v8/src/v8.gyp:v8',
+          '<(DEPTH)/v8/src/v8.gyp:v8_libplatform',
+        ],
+        'engine_defines': [],
+        'engine_templates_dir': [
+          '<(DEPTH)/cobalt/bindings/v8c/templates',
+        ],
+        'engine_template_files': [
+          '<(DEPTH)/cobalt/bindings/v8c/templates/callback-interface.cc.template',
+          '<(DEPTH)/cobalt/bindings/v8c/templates/callback-interface.h.template',
+          '<(DEPTH)/cobalt/bindings/v8c/templates/dictionary-conversion.cc.template',
+          '<(DEPTH)/cobalt/bindings/v8c/templates/enumeration-conversion.cc.template',
+          '<(DEPTH)/cobalt/bindings/v8c/templates/generated-types.h.template',
+          '<(DEPTH)/cobalt/bindings/v8c/templates/interface.cc.template',
+          '<(DEPTH)/cobalt/bindings/v8c/templates/interface.h.template',
+          '<(DEPTH)/cobalt/bindings/v8c/templates/macros.cc.template',
+        ],
+        'engine_bindings_scripts': [
+          '<(DEPTH)/cobalt/bindings/v8c/code_generator_v8c.py',
+          '<(DEPTH)/cobalt/bindings/v8c/idl_compiler_v8c.py',
+          '<(DEPTH)/cobalt/bindings/v8c/generate_conversion_header_v8c.py',
+        ],
+        'engine_idl_compiler':
+            '<(DEPTH)/cobalt/bindings/v8c/idl_compiler_v8c.py',
+        'engine_conversion_header_generator_script':
+            '<(DEPTH)/cobalt/bindings/v8c/generate_conversion_header_v8c.py',
+      }],
+    ],
+  },
+}
diff --git a/src/cobalt/storage/savegame_starboard.cc b/src/cobalt/storage/savegame_starboard.cc
index da62a3b..769d0b4 100644
--- a/src/cobalt/storage/savegame_starboard.cc
+++ b/src/cobalt/storage/savegame_starboard.cc
@@ -71,13 +71,13 @@
 
 scoped_ptr<starboard::StorageRecord> CreateRecord(
     const base::optional<std::string>& id) {
-#if SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION >= 6
   if (id) {
     return make_scoped_ptr(new starboard::StorageRecord(id->c_str()));
   }
-#else  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#else  // SB_API_VERSION >= 6
   UNREFERENCED_PARAMETER(id);
-#endif  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION >= 6
   return make_scoped_ptr(new starboard::StorageRecord());
 }
 
diff --git a/src/cobalt/system_window/input_event.h b/src/cobalt/system_window/input_event.h
index 2235657..12eae54 100644
--- a/src/cobalt/system_window/input_event.h
+++ b/src/cobalt/system_window/input_event.h
@@ -55,7 +55,7 @@
   InputEvent(Type type, int device_id, int key_code, uint32 modifiers,
              bool is_repeat, const math::PointF& position = math::PointF(),
              const math::PointF& delta = math::PointF()
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
                  ,
              float pressure = 0, const math::PointF& size = math::PointF(),
              const math::PointF& tilt = math::PointF()
@@ -68,7 +68,7 @@
         is_repeat_(is_repeat),
         position_(position),
         delta_(delta)
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
         ,
         pressure_(pressure),
         size_(size),
@@ -84,7 +84,7 @@
   bool is_repeat() const { return is_repeat_; }
   const math::PointF& position() const { return position_; }
   const math::PointF& delta() const { return delta_; }
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
   float pressure() const { return pressure_; }
   const math::PointF& size() const { return size_; }
   const math::PointF& tilt() const { return tilt_; }
@@ -100,7 +100,7 @@
   bool is_repeat_;
   math::PointF position_;
   math::PointF delta_;
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
   float pressure_;
   math::PointF size_;
   math::PointF tilt_;
diff --git a/src/cobalt/system_window/system_window.cc b/src/cobalt/system_window/system_window.cc
index 1e2c38f..7b2529e 100644
--- a/src/cobalt/system_window/system_window.cc
+++ b/src/cobalt/system_window/system_window.cc
@@ -102,7 +102,7 @@
   // Starboard handily uses the Microsoft key mapping, which is also what Cobalt
   // uses.
   int key_code = static_cast<int>(data.key);
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
   float pressure = data.pressure;
   uint32 modifiers = data.key_modifiers;
   if (((data.device_type == kSbInputDeviceTypeTouchPad) ||
@@ -159,7 +159,7 @@
       DispatchInputEvent(data, input_event_type, false /* is_repeat */);
       break;
     }
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
     case kSbInputEventTypeWheel: {
       DispatchInputEvent(data, InputEvent::kWheel, false /* is_repeat */);
       break;
diff --git a/src/cobalt/webdriver/element_driver.cc b/src/cobalt/webdriver/element_driver.cc
index b53ae7b..c8dbfd8 100644
--- a/src/cobalt/webdriver/element_driver.cc
+++ b/src/cobalt/webdriver/element_driver.cc
@@ -242,7 +242,7 @@
 
   event.set_pointer_type("mouse");
   event.set_pointer_id(kWebDriverMousePointerId);
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
   event.set_width(0.0f);
   event.set_height(0.0f);
   event.set_pressure(0.0f);
@@ -256,13 +256,13 @@
   pointer_event_injector_.Run(scoped_refptr<dom::Element>(),
                               base::Tokens::pointermove(), event);
   event.set_buttons(1);
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
   event.set_pressure(0.5f);
 #endif
   pointer_event_injector_.Run(scoped_refptr<dom::Element>(),
                               base::Tokens::pointerdown(), event);
   event.set_buttons(0);
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
   event.set_pressure(0.0f);
 #endif
   pointer_event_injector_.Run(scoped_refptr<dom::Element>(),
diff --git a/src/cobalt/webdriver/window_driver.cc b/src/cobalt/webdriver/window_driver.cc
index 8685d52..fac224c 100644
--- a/src/cobalt/webdriver/window_driver.cc
+++ b/src/cobalt/webdriver/window_driver.cc
@@ -530,7 +530,7 @@
 
   event->set_pointer_type("mouse");
   event->set_pointer_id(kWebDriverMousePointerId);
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
   event->set_width(0.0f);
   event->set_height(0.0f);
   event->set_pressure(pointer_buttons_ ? 0.5f : 0.0f);
diff --git a/src/starboard/CHANGELOG.md b/src/starboard/CHANGELOG.md
index 4b010c4..4bf24e5 100644
--- a/src/starboard/CHANGELOG.md
+++ b/src/starboard/CHANGELOG.md
@@ -71,6 +71,10 @@
   * Closed Caption key
   * Application launch key
   * Channel Up/Down keys
+  * Info key
+  * Guide key
+  * Last/Previous Channel key
+  * Media audio track select key
 
 ### `kSbEventTypeLowMemory`
 
diff --git a/src/starboard/configuration.h b/src/starboard/configuration.h
index b9a1f5c..a8548ea 100644
--- a/src/starboard/configuration.h
+++ b/src/starboard/configuration.h
@@ -68,23 +68,7 @@
 //   #define SB_MY_EXPERIMENTAL_FEATURE_VERSION SB_EXPERIMENTAL_API_VERSION
 
 // --- Release Candidate Feature Defines -------------------------------------
-#define SB_DECODE_TARGET_PLANE_FORMAT_VERSION 7
-
-#define SB_POINTER_INPUT_API_VERSION SB_RELEASE_CANDIDATE_API_VERSION
-#define SB_AUDIO_SPECIFIC_CONFIG_AS_POINTER SB_RELEASE_CANDIDATE_API_VERSION
-#define SB_TIME_ZONE_FLEXIBLE_API_VERSION SB_RELEASE_CANDIDATE_API_VERSION
-#define SB_DECODE_TARGET_PLANES_FOR_FORMAT SB_RELEASE_CANDIDATE_API_VERSION
-#define SB_PRELOAD_API_VERSION SB_RELEASE_CANDIDATE_API_VERSION
-#define SB_PLATFORM_ERROR_CLEANUP_API_VERSION SB_RELEASE_CANDIDATE_API_VERSION
-#define SB_DECODE_TARGET_UYVY_SUPPORT_API_VERSION \
-  SB_RELEASE_CANDIDATE_API_VERSION
-#define SB_NEW_KEYCODES_API_VERSION SB_RELEASE_CANDIDATE_API_VERSION
-#define SB_LOW_MEMORY_EVENT_API_VERSION SB_RELEASE_CANDIDATE_API_VERSION
-#define SB_PLAYER_WRITE_SAMPLE_EXTRA_CONST_API_VERSION \
-  SB_RELEASE_CANDIDATE_API_VERSION
-#define SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION \
-  SB_RELEASE_CANDIDATE_API_VERSION
-#define SB_STORAGE_NAMES_API_VERSION SB_RELEASE_CANDIDATE_API_VERSION
+#define SB_DECODE_TARGET_PLANE_FORMAT_VERSION SB_RELEASE_CANDIDATE_API_VERSION
 
 // --- Common Detected Features ----------------------------------------------
 
diff --git a/src/starboard/decode_target.h b/src/starboard/decode_target.h
index 40a680f..2bb46e5 100644
--- a/src/starboard/decode_target.h
+++ b/src/starboard/decode_target.h
@@ -135,7 +135,7 @@
   // A decoder target format consisting of Y, U, and V planes, in that order.
   kSbDecodeTargetFormat3PlaneYUVI420,
 
-#if SB_API_VERSION >= SB_DECODE_TARGET_UYVY_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
   // A decoder target format consisting of a single plane with pixels layed out
   // in the format UYVY.  Since there are two Y values per sample, but only one
   // U value and only one V value, horizontally the Y resolution is twice the
@@ -146,7 +146,7 @@
   // the number of UYVY tuples per row (e.g. the u/v width resolution).
   // Content region left/right should be specified in u/v width resolution.
   kSbDecodeTargetFormat1PlaneUYVY,
-#endif  // SB_DECODE_TARGET_UYVY_SUPPORT_API_VERSION
+#endif
 
   // An invalid decode target format.
   kSbDecodeTargetFormatInvalid,
@@ -251,7 +251,7 @@
   // that it be set to something else like GL_TEXTURE_EXTERNAL_OES.
   uint32_t gl_texture_target;
 
-#if SB_API_VERSION >= SB_DECODE_TARGET_FORMAT_VERSION
+#if SB_API_VERSION >= SB_DECODE_TARGET_PLANE_FORMAT_VERSION
   // For kSbDecodeTargetFormat2PlaneYUVNV12 planes: the format of the
   // texture. Usually, for the luma plane, this is either GL_ALPHA or
   // GL_RED_EXT. For the chroma plane, this is usually GL_LUMINANCE_ALPHA
@@ -260,7 +260,7 @@
   uint32_t gl_texture_format;
 #endif  // SB_API_VERSION >= SB_DECODE_TARGET_NV12_R_RG_API_VERSION
 
-#endif               // SB_HAS(BLITTER)
+#endif  // SB_HAS(BLITTER)
 
   // The width of the texture/surface for this particular plane.
   int width;
@@ -323,14 +323,12 @@
   return format != kSbDecodeTargetFormatInvalid;
 }
 
-#if SB_API_VERSION >= SB_DECODE_TARGET_PLANES_FOR_FORMAT
+#if SB_API_VERSION >= 6
 static SB_C_INLINE int SbDecodeTargetNumberOfPlanesForFormat(
     SbDecodeTargetFormat format) {
   switch (format) {
     case kSbDecodeTargetFormat1PlaneRGBA:
-#if SB_API_VERSION >= SB_DECODE_TARGET_UYVY_SUPPORT_API_VERSION
     case kSbDecodeTargetFormat1PlaneUYVY:
-#endif  // SB_API_VERSION >= SB_DECODE_TARGET_UYVY_SUPPORT_API_VERSION
       return 1;
     case kSbDecodeTargetFormat1PlaneBGRA:
       return 1;
@@ -343,7 +341,7 @@
       return 0;
   }
 }
-#endif  // SB_API_VERSION >= SB_DECODE_TARGET_PLANES_FOR_FORMAT
+#endif  // SB_API_VERSION >= 6
 
 // Returns ownership of |decode_target| to the Starboard implementation.
 // This function will likely result in the destruction of the SbDecodeTarget and
diff --git a/src/starboard/drm.h b/src/starboard/drm.h
index 8149cd8..4ce3df8 100644
--- a/src/starboard/drm.h
+++ b/src/starboard/drm.h
@@ -52,14 +52,14 @@
   int32_t encrypted_byte_count;
 } SbDrmSubSampleMapping;
 
-#if SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
 typedef struct SbDrmKeyId {
   // The ID of the license (or key) required to decrypt this sample. For
   // PlayReady, this is the license GUID in packed little-endian binary form.
   uint8_t identifier[16];
   int identifier_size;
 } SbDrmKeyId;
-#endif  // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
 // All the optional information needed per sample for encrypted samples.
 typedef struct SbDrmSampleInfo {
@@ -121,7 +121,7 @@
 // A callback for notifications that the status of one or more keys in a session
 // has been changed.  All keys of the session and their new status will be
 // passed along.  Any keys not in the list is considered as deleted.
-#if SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
 typedef void (*SbDrmSessionKeyStatusesChangedFunc)(
     SbDrmSystem drm_system,
     void* context,
@@ -130,7 +130,7 @@
     int number_of_keys,
     const SbDrmKeyId* key_ids,
     const SbDrmKeyStatus* key_statuses);
-#endif  // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
 // --- Constants -------------------------------------------------------------
 
@@ -171,7 +171,7 @@
 // SbDrmGenerateSessionUpdateRequest() is called.
 // |session_updated_callback|: A function that is called every time after
 // SbDrmUpdateSession() is called.
-#if SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
 
 SB_EXPORT SbDrmSystem SbDrmCreateSystem(
     const char* key_system,
@@ -180,7 +180,7 @@
     SbDrmSessionUpdatedFunc session_updated_callback,
     SbDrmSessionKeyStatusesChangedFunc key_statuses_changed_callback);
 
-#else  // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#else  // SB_API_VERSION >= 6
 
 SB_EXPORT SbDrmSystem
 SbDrmCreateSystem(const char* key_system,
diff --git a/src/starboard/event.h b/src/starboard/event.h
index 7bfca2c..cd01304 100644
--- a/src/starboard/event.h
+++ b/src/starboard/event.h
@@ -95,7 +95,7 @@
 // system. Each event is accompanied by a void* data argument, and each event
 // must define the type of the value pointed to by that data argument, if any.
 typedef enum SbEventType {
-#if SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#if SB_API_VERSION >= 6
   // Applications should perform initialization and prepare to react to
   // subsequent events, but must not initialize any graphics resources (through
   // GL or SbBlitter). The intent of this event is to allow the application to
@@ -112,7 +112,7 @@
   // call SbSystemRequestSuspend() when they are done preloading to request
   // this.
   kSbEventTypePreload,
-#endif  // SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
   // The first event that an application receives on startup when starting
   // normally (i.e. not being preloaded). Applications should perform
@@ -204,14 +204,14 @@
   // new settings.
   kSbEventTypeAccessiblitySettingsChanged,
 
-#if SB_API_VERSION >= SB_LOW_MEMORY_EVENT_API_VERSION
+#if SB_API_VERSION >= 6
   // An optional event that platforms may send to indicate that the application
   // may soon be terminated (or crash) due to low memory availability. The
   // application may respond by reducing memory consumption by running a Garbage
   // Collection, flushing caches, or something similar. There is no requirement
   // to respond to or handle this event, it is only advisory.
   kSbEventTypeLowMemory,
-#endif  // SB_API_VERSION >= SB_LOW_MEMORY_EVENT_API_VERSION
+#endif  // SB_API_VERSION >= 6
 } SbEventType;
 
 // Structure representing a Starboard event and its data.
diff --git a/src/starboard/examples/window/main.cc b/src/starboard/examples/window/main.cc
index b508e7d..20b0341 100644
--- a/src/starboard/examples/window/main.cc
+++ b/src/starboard/examples/window/main.cc
@@ -32,7 +32,7 @@
 
 void SbEventHandle(const SbEvent* event) {
   switch (event->type) {
-#if SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#if SB_API_VERSION >= 6
     case kSbEventTypePreload: {
       SB_LOG(INFO) << "PRELOAD";
       SbEventStartData* data = static_cast<SbEventStartData*>(event->data);
diff --git a/src/starboard/input.h b/src/starboard/input.h
index c3a7dbf..a32a05a 100644
--- a/src/starboard/input.h
+++ b/src/starboard/input.h
@@ -121,7 +121,7 @@
   // event is sent when the key or button being pressed is released.
   kSbInputEventTypeUnpress,
 
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
   // Wheel movement. Provides relative movements of the |Mouse| wheel.
   kSbInputEventTypeWheel,
 #endif
@@ -176,7 +176,7 @@
   // not applicable.
   SbInputVector delta;
 
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
   // The normalized pressure of the pointer input in the range of [0,1], where 0
   // and 1 represent the minimum and maximum pressure the hardware is capable of
   // detecting, respectively. Use NaN for devices that do not report pressure.
diff --git a/src/starboard/key.h b/src/starboard/key.h
index 73a1cb6..34d2f19 100644
--- a/src/starboard/key.h
+++ b/src/starboard/key.h
@@ -208,7 +208,9 @@
   kSbKeyMediaRewind = 0xE3,
   kSbKeyMediaFastForward = 0xE4,
 
-#if SB_API_VERSION >= SB_NEW_KEYCODES_API_VERSION
+#if SB_API_VERSION >= 6
+  // Key codes from the DTV Application Software Environment,
+  //   http://www.atsc.org/wp-content/uploads/2015/03/a_100_4.pdf
   kSbKeyRed = 0x193,
   kSbKeyGreen = 0x194,
   kSbKeyYellow = 0x195,
@@ -219,9 +221,22 @@
   kSbKeySubtitle = 0x1CC,
   kSbKeyClosedCaption = kSbKeySubtitle,
 
+  kSbKeyInfo = 0x1C9,
+  kSbKeyGuide = 0x1CA,
+
+  // Key codes from OCAP,
+  //   https://apps.cablelabs.com/specification/opencable-application-platform-ocap/
+  kSbKeyLast = 0x25f,
+  kSbKeyPreviousChannel = kSbKeyLast,
+
+  // Custom Starboard-defined keycodes.
+
   // A button that will directly launch the current application.
   kSbKeyLaunchThisApplication = 0x3000,
-#endif  // SB_API_VERSION >= SB_NEW_KEYCODES_API_VERSION
+
+  // A button that will switch between different available audio tracks.
+  kSbKeyMediaAudioTrack = 0x3001,
+#endif  // SB_API_VERSION >= 6
 
   // Mouse buttons, starting with the left mouse button.
   kSbKeyMouse1 = 0x7000,
@@ -296,7 +311,7 @@
   kSbKeyModifiersCtrl = 1 << 1,
   kSbKeyModifiersMeta = 1 << 2,
   kSbKeyModifiersShift = 1 << 3,
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
   kSbKeyModifiersPointerButtonLeft = 1 << 4,
   kSbKeyModifiersPointerButtonRight = 1 << 5,
   kSbKeyModifiersPointerButtonMiddle = 1 << 6,
diff --git a/src/starboard/media.h b/src/starboard/media.h
index a01b109..2673bcf 100644
--- a/src/starboard/media.h
+++ b/src/starboard/media.h
@@ -462,11 +462,11 @@
 
   // The AudioSpecificConfig, as specified in ISO/IEC-14496-3, section 1.6.2.1:
   // http://read.pudn.com/downloads98/doc/comm/401153/14496/ISO_IEC_14496-3%20Part%203%20Audio/C036083E_SUB1.PDF
-#if SB_API_VERSION >= SB_AUDIO_SPECIFIC_CONFIG_AS_POINTER
+#if SB_API_VERSION >= 6
   const void* audio_specific_config;
-#else   // SB_API_VERSION >= SB_AUDIO_SPECIFIC_CONFIG_AS_POINTER
+#else   // SB_API_VERSION >= 6
   int8_t audio_specific_config[8];
-#endif  // SB_API_VERSION >= SB_AUDIO_SPECIFIC_CONFIG_AS_POINTER
+#endif  // SB_API_VERSION >= 6
 } SbMediaAudioHeader;
 
 // --- Constants -------------------------------------------------------------
diff --git a/src/starboard/nplb/key_test.cc b/src/starboard/nplb/key_test.cc
index f3644cd..784f602 100644
--- a/src/starboard/nplb/key_test.cc
+++ b/src/starboard/nplb/key_test.cc
@@ -24,7 +24,7 @@
   EXPECT_NE(kSbKeyUnknown, kSbKeyMediaRewind);
   EXPECT_NE(kSbKeyUnknown, kSbKeyMediaFastForward);
 
-#if SB_API_VERSION >= SB_NEW_KEYCODES_API_VERSION
+#if SB_API_VERSION >= 6
   EXPECT_NE(kSbKeyUnknown, kSbKeyRed);
   EXPECT_NE(kSbKeyUnknown, kSbKeyGreen);
   EXPECT_NE(kSbKeyUnknown, kSbKeyYellow);
@@ -33,8 +33,13 @@
   EXPECT_NE(kSbKeyUnknown, kSbKeyChannelUp);
   EXPECT_NE(kSbKeyUnknown, kSbKeyChannelDown);
   EXPECT_NE(kSbKeyUnknown, kSbKeyClosedCaption);
+  EXPECT_NE(kSbKeyUnknown, kSbKeyInfo);
+  EXPECT_NE(kSbKeyUnknown, kSbKeyGuide);
+  EXPECT_NE(kSbKeyUnknown, kSbKeyLast);
+  EXPECT_NE(kSbKeyUnknown, kSbKeyPreviousChannel);
   EXPECT_NE(kSbKeyUnknown, kSbKeyLaunchThisApplication);
-#endif  //  SB_API_VERSION >= SB_NEW_KEYCODES_API_VERSION
+  EXPECT_NE(kSbKeyUnknown, kSbKeyMediaAudioTrack);
+#endif  //  SB_API_VERSION >= 6
 }
 
 }  // namespace
diff --git a/src/starboard/nplb/player_create_test.cc b/src/starboard/nplb/player_create_test.cc
index 9172d45..f9cbe22 100644
--- a/src/starboard/nplb/player_create_test.cc
+++ b/src/starboard/nplb/player_create_test.cc
@@ -50,9 +50,9 @@
   audio_header.block_alignment = 4;
   audio_header.bits_per_sample = 32;
   audio_header.audio_specific_config_size = 0;
-#if SB_API_VERSION >= SB_AUDIO_SPECIFIC_CONFIG_AS_POINTER
+#if SB_API_VERSION >= 6
   audio_header.audio_specific_config = NULL;
-#endif  // SB_API_VERSION >= SB_AUDIO_SPECIFIC_CONFIG_AS_POINTER
+#endif  // SB_API_VERSION >= 6
   audio_header.average_bytes_per_second = audio_header.samples_per_second *
                                           audio_header.number_of_channels *
                                           audio_header.bits_per_sample / 8;
diff --git a/src/starboard/nplb/storage_delete_record_test.cc b/src/starboard/nplb/storage_delete_record_test.cc
index ef0fc73..ef3db9a 100644
--- a/src/starboard/nplb/storage_delete_record_test.cc
+++ b/src/starboard/nplb/storage_delete_record_test.cc
@@ -23,7 +23,7 @@
 namespace nplb {
 namespace {
 
-#if SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION >= 6
 
 TEST(SbStorageDeleteRecordTest, RainyDayInvalidUserValidName) {
   EXPECT_FALSE(SbStorageDeleteRecord(
@@ -34,13 +34,13 @@
   EXPECT_FALSE(SbStorageDeleteRecord(kSbUserInvalid, NULL));
 }
 
-#else  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#else  // SB_API_VERSION >= 6
 
 TEST(SbStorageDeleteRecordTest, RainyDayInvalidUser) {
   EXPECT_FALSE(SbStorageDeleteRecord(kSbUserInvalid));
 }
 
-#endif  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
 }  // namespace
 }  // namespace nplb
diff --git a/src/starboard/nplb/storage_helpers.h b/src/starboard/nplb/storage_helpers.h
index c587203..867d3b0 100644
--- a/src/starboard/nplb/storage_helpers.h
+++ b/src/starboard/nplb/storage_helpers.h
@@ -28,32 +28,32 @@
 
 // Deletes the storage for the current user.
 static SB_C_INLINE void ClearStorageRecord() {
-#if SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION >= 6
   SbStorageDeleteRecord(SbUserGetCurrent(), NULL);
-#else   // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#else   // SB_API_VERSION >= 6
   SbStorageDeleteRecord(SbUserGetCurrent());
-#endif  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION >= 6
 }
 
-#if SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION >= 6
 // Deletes the named storage record for the current user.
 static SB_C_INLINE void ClearStorageRecord(const char* name) {
   SbStorageDeleteRecord(SbUserGetCurrent(), name);
 }
-#endif  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
 // Opens the storage record for the current user, validating that it is valid.
 static SB_C_INLINE SbStorageRecord OpenStorageRecord() {
-#if SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION >= 6
   SbStorageRecord record = SbStorageOpenRecord(SbUserGetCurrent(), NULL);
-#else   // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#else   // SB_API_VERSION >= 6
   SbStorageRecord record = SbStorageOpenRecord(SbUserGetCurrent());
-#endif  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION >= 6
   EXPECT_TRUE(SbStorageIsValidRecord(record));
   return record;
 }
 
-#if SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION >= 6
 // Opens the named storage record for the current user, validating that it is
 // valid.
 static SB_C_INLINE SbStorageRecord OpenStorageRecord(const char* name) {
@@ -61,7 +61,7 @@
   EXPECT_TRUE(SbStorageIsValidRecord(record));
   return record;
 }
-#endif  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
 // Writes a standard pattern of |size| bytes into the given open storage
 // |record|.
diff --git a/src/starboard/nplb/storage_open_record_test.cc b/src/starboard/nplb/storage_open_record_test.cc
index c935e4a..5526451 100644
--- a/src/starboard/nplb/storage_open_record_test.cc
+++ b/src/starboard/nplb/storage_open_record_test.cc
@@ -23,7 +23,7 @@
 namespace nplb {
 namespace {
 
-#if SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION >= 6
 
 TEST(SbStorageOpenRecordTest, RainyDayInvalidUserValidName) {
   EXPECT_FALSE(SbStorageIsValidRecord(SbStorageOpenRecord(
@@ -35,13 +35,13 @@
       SbStorageIsValidRecord(SbStorageOpenRecord(kSbUserInvalid, NULL)));
 }
 
-#else  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#else  // SB_API_VERSION >= 6
 
 TEST(SbStorageOpenRecordTest, RainyDayInvalidUser) {
   EXPECT_FALSE(SbStorageIsValidRecord(SbStorageOpenRecord(kSbUserInvalid)));
 }
 
-#endif  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
 }  // namespace
 }  // namespace nplb
diff --git a/src/starboard/nplb/storage_read_record_test.cc b/src/starboard/nplb/storage_read_record_test.cc
index 336e716..d6e46c9 100644
--- a/src/starboard/nplb/storage_read_record_test.cc
+++ b/src/starboard/nplb/storage_read_record_test.cc
@@ -54,7 +54,7 @@
   EXPECT_TRUE(SbStorageCloseRecord(record));
 }
 
-#if SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION >= 6
 TEST(SbStorageReadRecordTest, SunnyDayNamed) {
   int64_t pattern = 0;
   std::string name = ScopedRandomFile::MakeRandomFilename();
@@ -157,7 +157,7 @@
   ClearStorageRecord(name2.c_str());
   ClearStorageRecord();
 }
-#endif  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
 TEST(SbStorageReadRecordTest, SunnyDayNonexistant) {
   ClearStorageRecord();
diff --git a/src/starboard/nplb/time_zone_get_dst_name_test.cc b/src/starboard/nplb/time_zone_get_dst_name_test.cc
index d2926b5..fb7f20b 100644
--- a/src/starboard/nplb/time_zone_get_dst_name_test.cc
+++ b/src/starboard/nplb/time_zone_get_dst_name_test.cc
@@ -20,7 +20,7 @@
 namespace nplb {
 namespace {
 
-#if SB_API_VERSION < SB_TIME_ZONE_FLEXIBLE_API_VERSION
+#if SB_API_VERSION < 6
 TEST(SbTimeZoneGetDstNameTest, IsKindOfSane) {
   const char* name = SbTimeZoneGetDstName();
 
@@ -35,7 +35,7 @@
   EXPECT_GE(i, 3);
   EXPECT_LE(i, 5);
 }
-#endif  // SB_API_VERSION < SB_TIME_ZONE_FLEXIBLE_API_VERSION
+#endif  // SB_API_VERSION < 6
 
 }  // namespace
 }  // namespace nplb
diff --git a/src/starboard/nplb/time_zone_get_name_test.cc b/src/starboard/nplb/time_zone_get_name_test.cc
index 41b7d5e..32428ce 100644
--- a/src/starboard/nplb/time_zone_get_name_test.cc
+++ b/src/starboard/nplb/time_zone_get_name_test.cc
@@ -34,12 +34,12 @@
   // or "Pacific Standard Time" or like "America/Los_Angeles"
   EXPECT_GE(i, 3);
 
-#if SB_API_VERSION < SB_TIME_ZONE_FLEXIBLE_API_VERSION
+#if SB_API_VERSION < 6
   // Some, like WART for Western Argentina, are 4.
   // A very few, like ANAST, or CHAST is 5
   // http://www.timeanddate.com/time/zones/
   EXPECT_LE(i, 5);
-#endif  // SB_API_VERSION < SB_TIME_ZONE_FLEXIBLE_API_VERSION
+#endif  // SB_API_VERSION < 6
 
   // On Linux, TZ=":Pacific/Chatham" is a good test of boundary conditions.
   // ":Pacific/Kiritimati" is the western-most timezone at UTC+14.
diff --git a/src/starboard/player.h b/src/starboard/player.h
index 20b95a5..b97e354 100644
--- a/src/starboard/player.h
+++ b/src/starboard/player.h
@@ -242,11 +242,11 @@
 // |audio_header|: Note that the caller must provide a populated |audio_header|
 //   if the audio codec is |kSbMediaAudioCodecAac|. Otherwise, |audio_header|
 //   can be NULL. See media.h for the format of the |SbMediaAudioHeader| struct.
-#if SB_API_VERSION >= SB_AUDIO_SPECIFIC_CONFIG_AS_POINTER
+#if SB_API_VERSION >= 6
 //   Note that |audio_specific_config| is a pointer and the content it points to
 //   is no longer valid after this function returns.  The implementation has to
 //   make a copy of the content if it is needed after the function returns.
-#endif  // SB_API_VERSION >= SB_AUDIO_SPECIFIC_CONFIG_AS_POINTER
+#endif  // SB_API_VERSION >= 6
 //
 // |sample_deallocator_func|: If not |NULL|, the player calls this function
 //   on an internal thread to free the sample buffers passed into
@@ -377,13 +377,13 @@
 SB_EXPORT void SbPlayerWriteSample(
     SbPlayer player,
     SbMediaType sample_type,
-#if SB_API_VERSION >= SB_PLAYER_WRITE_SAMPLE_EXTRA_CONST_API_VERSION
+#if SB_API_VERSION >= 6
     const void* const* sample_buffers,
     const int* sample_buffer_sizes,
-#else   // SB_API_VERSION >= SB_PLAYER_WRITE_SAMPLE_EXTRA_CONST_API_VERSION
+#else   // SB_API_VERSION >= 6
     const void** sample_buffers,
     int* sample_buffer_sizes,
-#endif  // SB_API_VERSION >= SB_PLAYER_WRITE_SAMPLE_EXTRA_CONST_API_VERSION
+#endif  // SB_API_VERSION >= 6
     int number_of_sample_buffers,
     SbMediaTime sample_pts,
     const SbMediaVideoSampleInfo* video_sample_info,
diff --git a/src/starboard/raspi/shared/application_dispmanx.h b/src/starboard/raspi/shared/application_dispmanx.h
index 37f0b61..9f089da 100644
--- a/src/starboard/raspi/shared/application_dispmanx.h
+++ b/src/starboard/raspi/shared/application_dispmanx.h
@@ -62,10 +62,10 @@
   Event* WaitForSystemEventWithTimeout(SbTime duration) SB_OVERRIDE;
   void WakeSystemEventWait() SB_OVERRIDE;
 
-#if SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#if SB_API_VERSION >= 6
   bool IsStartImmediate() SB_OVERRIDE { return !HasPreloadSwitch(); }
   bool IsPreloadImmediate() SB_OVERRIDE { return HasPreloadSwitch(); }
-#endif  // SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
  private:
   // Returns whether DISPMANX has been initialized.
diff --git a/src/starboard/shared/directfb/application_directfb.h b/src/starboard/shared/directfb/application_directfb.h
index 65f96c2..522bbc2 100644
--- a/src/starboard/shared/directfb/application_directfb.h
+++ b/src/starboard/shared/directfb/application_directfb.h
@@ -44,10 +44,10 @@
   IDirectFB* GetDirectFB();
   SbWindow GetWindow();
 
-#if SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#if SB_API_VERSION >= 6
   bool IsStartImmediate() SB_OVERRIDE { return !HasPreloadSwitch(); }
   bool IsPreloadImmediate() SB_OVERRIDE { return HasPreloadSwitch(); }
-#endif  // SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
  protected:
   // --- Application overrides ---
diff --git a/src/starboard/shared/linux/dev_input/dev_input.cc b/src/starboard/shared/linux/dev_input/dev_input.cc
index 10393dd..f0155e7 100644
--- a/src/starboard/shared/linux/dev_input/dev_input.cc
+++ b/src/starboard/shared/linux/dev_input/dev_input.cc
@@ -921,7 +921,7 @@
   data->key_location = location;
   data->key_modifiers = modifiers;
   data->position = input_vector;
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
   data->pressure = NAN;
   data->size = {NAN, NAN};
   data->tilt = {NAN, NAN};
@@ -949,7 +949,7 @@
   data->key_location = location;
   data->key_modifiers = modifiers;
   data->position = input_vector;
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
   data->pressure = NAN;
   data->size = {NAN, NAN};
   data->tilt = {NAN, NAN};
diff --git a/src/starboard/shared/posix/time_zone_get_dst_name.cc b/src/starboard/shared/posix/time_zone_get_dst_name.cc
index 97683f9..cc437ae 100644
--- a/src/starboard/shared/posix/time_zone_get_dst_name.cc
+++ b/src/starboard/shared/posix/time_zone_get_dst_name.cc
@@ -16,11 +16,11 @@
 
 #include <time.h>
 
-#if SB_API_VERSION < SB_TIME_ZONE_FLEXIBLE_API_VERSION
+#if SB_API_VERSION < 6
 const char* SbTimeZoneGetDstName() {
   // TODO: Using tzname assumes that tzset() has been called at some
   // point. That should happen as part of Starboard's main loop initialization,
   // but that doesn't exist yet.
   return tzname[1];
 }
-#endif  // SB_API_VERSION < SB_TIME_ZONE_FLEXIBLE_API_VERSION
+#endif  // SB_API_VERSION < 6
diff --git a/src/starboard/shared/starboard/application.cc b/src/starboard/shared/starboard/application.cc
index 71235ab..926545b 100644
--- a/src/starboard/shared/starboard/application.cc
+++ b/src/starboard/shared/starboard/application.cc
@@ -136,9 +136,9 @@
 }
 
 void Application::InjectLowMemoryEvent() {
-#if SB_API_VERSION >= SB_LOW_MEMORY_EVENT_API_VERSION
+#if SB_API_VERSION >= 6
   Inject(new Event(kSbEventTypeLowMemory, NULL, NULL));
-#endif  // SB_API_VERSION >= SB_LOW_MEMORY_EVENT_API_VERSION
+#endif  // SB_API_VERSION >= 6
 }
 
 SbEventId Application::Schedule(SbEventCallback callback,
@@ -183,12 +183,12 @@
 
 void Application::DispatchPreload() {
   SB_DCHECK(IsCurrentThread());
-#if SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#if SB_API_VERSION >= 6
   SB_DCHECK(state_ == kStateUnstarted);
   DispatchAndDelete(CreateInitialEvent(kSbEventTypePreload));
-#else  // SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#else  // SB_API_VERSION >= 6
   SB_NOTREACHED();
-#endif  // SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#endif  // SB_API_VERSION >= 6
 }
 
 bool Application::HasPreloadSwitch() {
@@ -207,13 +207,13 @@
   // Ensure that we go through the the appropriate lifecycle events based on the
   // current state.
   switch (scoped_event->event->type) {
-#if SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#if SB_API_VERSION >= 6
     case kSbEventTypePreload:
       if (state() != kStateUnstarted) {
         return true;
       }
       break;
-#endif  // SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#endif  // SB_API_VERSION >= 6
     case kSbEventTypeStart:
       if (state() != kStatePreloading && state() != kStateUnstarted) {
         return true;
@@ -294,12 +294,12 @@
   SbEventHandle(scoped_event->event);
 
   switch (scoped_event->event->type) {
-#if SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#if SB_API_VERSION >= 6
     case kSbEventTypePreload:
       SB_DCHECK(state() == kStateUnstarted);
       state_ = kStatePreloading;
       break;
-#endif  // SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#endif  // SB_API_VERSION >= 6
     case kSbEventTypeStart:
       SB_DCHECK(state() == kStatePreloading || state() == kStateUnstarted);
       state_ = kStateStarted;
@@ -342,11 +342,11 @@
 }
 
 Application::Event* Application::CreateInitialEvent(SbEventType type) {
-#if SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#if SB_API_VERSION >= 6
   SB_DCHECK(type == kSbEventTypePreload || type == kSbEventTypeStart);
-#else  // SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#else  // SB_API_VERSION >= 6
   SB_DCHECK(type == kSbEventTypeStart);
-#endif  // SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#endif  // SB_API_VERSION >= 6
   SbEventStartData* start_data = new SbEventStartData();
   SbMemorySet(start_data, 0, sizeof(SbEventStartData));
   start_data->argument_values =
diff --git a/src/starboard/shared/starboard/file_storage/storage_delete_record.cc b/src/starboard/shared/starboard/file_storage/storage_delete_record.cc
index c5c7fe3..cdfecce 100644
--- a/src/starboard/shared/starboard/file_storage/storage_delete_record.cc
+++ b/src/starboard/shared/starboard/file_storage/storage_delete_record.cc
@@ -19,18 +19,18 @@
 #include "starboard/user.h"
 
 bool SbStorageDeleteRecord(SbUser user
-#if SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION >= 6
                            ,
                            const char* name
-#endif  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION >= 6
                            ) {
   if (!SbUserIsValid(user)) {
     return false;
   }
 
-#if SB_API_VERSION < SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION < 6
   const char* name = NULL;
-#endif  // SB_API_VERSION < SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION < 6
 
   char path[SB_FILE_MAX_PATH];
   bool success = starboard::shared::starboard::GetUserStorageFilePath(
diff --git a/src/starboard/shared/starboard/file_storage/storage_internal.h b/src/starboard/shared/starboard/file_storage/storage_internal.h
index a56cd34..4bbc117 100644
--- a/src/starboard/shared/starboard/file_storage/storage_internal.h
+++ b/src/starboard/shared/starboard/file_storage/storage_internal.h
@@ -29,9 +29,9 @@
 struct SbStorageRecordPrivate {
   SbUser user;
   SbFile file;
-#if SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION >= 6
   std::string name;
-#endif  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION >= 6
 };
 
 namespace starboard {
diff --git a/src/starboard/shared/starboard/file_storage/storage_open_record.cc b/src/starboard/shared/starboard/file_storage/storage_open_record.cc
index aaea393..8417083 100644
--- a/src/starboard/shared/starboard/file_storage/storage_open_record.cc
+++ b/src/starboard/shared/starboard/file_storage/storage_open_record.cc
@@ -20,18 +20,18 @@
 #include "starboard/user.h"
 
 SbStorageRecord SbStorageOpenRecord(SbUser user
-#if SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION >= 6
                                     ,
                                     const char* name
-#endif  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION >= 6
                                     ) {
   if (!SbUserIsValid(user)) {
     return kSbStorageInvalidRecord;
   }
 
-#if SB_API_VERSION < SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION < 6
   const char* name = NULL;
-#endif  // SB_API_VERSION < SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION < 6
 
   char path[SB_FILE_MAX_PATH];
   bool success = starboard::shared::starboard::GetUserStorageFilePath(
@@ -52,7 +52,7 @@
   SB_DCHECK(SbStorageIsValidRecord(result));
   result->user = user;
   result->file = file;
-#if SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION >= 6
   if (name) {
     result->name = name;
   }
diff --git a/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.cc b/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.cc
index 276c6c5..a04991b 100644
--- a/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.cc
+++ b/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.cc
@@ -60,7 +60,7 @@
       volume_(1.0),
       output_mode_(output_mode),
       decode_target_graphics_context_provider_(provider) {
-#if SB_API_VERSION >= SB_AUDIO_SPECIFIC_CONFIG_AS_POINTER
+#if SB_API_VERSION >= 6
   if (audio_header_.audio_specific_config_size > 0) {
     audio_specific_config_.reset(
         new int8_t[audio_header_.audio_specific_config_size]);
@@ -69,7 +69,7 @@
                  audio_header.audio_specific_config,
                  audio_header.audio_specific_config_size);
   }
-#endif  // SB_API_VERSION >= SB_AUDIO_SPECIFIC_CONFIG_AS_POINTER
+#endif  // SB_API_VERSION >= 6
 
   update_closure_ = Bind(&FilterBasedPlayerWorkerHandler::Update, this);
   bounds_ = PlayerWorker::Bounds();
diff --git a/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.h b/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.h
index efceeaa..3e441fa 100644
--- a/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.h
+++ b/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.h
@@ -76,11 +76,11 @@
   SbMediaVideoCodec video_codec_;
   SbMediaAudioCodec audio_codec_;
   SbDrmSystem drm_system_;
-#if SB_API_VERSION >= SB_AUDIO_SPECIFIC_CONFIG_AS_POINTER
+#if SB_API_VERSION >= 6
   // Store a copy of |SbMediaAudioHeader::audio_specific_config| passed to the
   // ctor so it is valid for the life time of the player worker.
   scoped_array<int8_t> audio_specific_config_;
-#endif  // SB_API_VERSION >= SB_AUDIO_SPECIFIC_CONFIG_AS_POINTER
+#endif  // SB_API_VERSION >= 6
   SbMediaAudioHeader audio_header_;
 
   scoped_ptr<AudioRenderer> audio_renderer_;
diff --git a/src/starboard/shared/starboard/player/player_write_sample.cc b/src/starboard/shared/starboard/player/player_write_sample.cc
index 770b981..62122dc 100644
--- a/src/starboard/shared/starboard/player/player_write_sample.cc
+++ b/src/starboard/shared/starboard/player/player_write_sample.cc
@@ -19,13 +19,13 @@
 
 void SbPlayerWriteSample(SbPlayer player,
                          SbMediaType sample_type,
-#if SB_API_VERSION >= SB_PLAYER_WRITE_SAMPLE_EXTRA_CONST_API_VERSION
+#if SB_API_VERSION >= 6
                          const void* const* sample_buffers,
                          const int* sample_buffer_sizes,
-#else   // SB_API_VERSION >= SB_PLAYER_WRITE_SAMPLE_EXTRA_CONST_API_VERSION
+#else   // SB_API_VERSION >= 6
                          const void** sample_buffers,
                          int* sample_buffer_sizes,
-#endif  // SB_API_VERSION >= SB_PLAYER_WRITE_SAMPLE_EXTRA_CONST_API_VERSION
+#endif  // SB_API_VERSION >= 6
                          int number_of_sample_buffers,
                          SbMediaTime sample_pts,
                          const SbMediaVideoSampleInfo* video_sample_info,
diff --git a/src/starboard/shared/stub/drm_create_system.cc b/src/starboard/shared/stub/drm_create_system.cc
index 64139a9..5b43825 100644
--- a/src/starboard/shared/stub/drm_create_system.cc
+++ b/src/starboard/shared/stub/drm_create_system.cc
@@ -14,7 +14,7 @@
 
 #include "starboard/drm.h"
 
-#if SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#if SB_API_VERSION >= 6
 
 SbDrmSystem SbDrmCreateSystem(
     const char* key_system,
@@ -30,7 +30,7 @@
   return kSbDrmSystemInvalid;
 }
 
-#else  // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#else  // SB_API_VERSION >= 6
 
 SbDrmSystem SbDrmCreateSystem(
     const char* key_system,
@@ -44,4 +44,4 @@
   return kSbDrmSystemInvalid;
 }
 
-#endif  // SB_API_VERSION >= SB_DRM_KEY_STATUSES_UPDATE_SUPPORT_API_VERSION
+#endif  // SB_API_VERSION >= 6
diff --git a/src/starboard/shared/stub/player_write_sample.cc b/src/starboard/shared/stub/player_write_sample.cc
index e08b4b4..b5a02eb 100644
--- a/src/starboard/shared/stub/player_write_sample.cc
+++ b/src/starboard/shared/stub/player_write_sample.cc
@@ -20,13 +20,13 @@
 
 void SbPlayerWriteSample(SbPlayer /*player*/,
                          SbMediaType /*sample_type*/,
-#if SB_API_VERSION >= SB_PLAYER_WRITE_SAMPLE_EXTRA_CONST_API_VERSION
+#if SB_API_VERSION >= 6
                          const void* const* /*sample_buffers*/,
                          const int* /*sample_buffer_sizes*/,
-#else   // SB_API_VERSION >= SB_PLAYER_WRITE_SAMPLE_EXTRA_CONST_API_VERSION
+#else   // SB_API_VERSION >= 6
                          const void** /*sample_buffers*/,
                          int* /*sample_buffer_sizes*/,
-#endif  // SB_API_VERSION >= SB_PLAYER_WRITE_SAMPLE_EXTRA_CONST_API_VERSION
+#endif  // SB_API_VERSION >= 6
                          int /*number_of_sample_buffers*/,
                          SbMediaTime /*sample_pts*/,
                          const SbMediaVideoSampleInfo* /*video_sample_info*/,
diff --git a/src/starboard/shared/stub/storage_delete_record.cc b/src/starboard/shared/stub/storage_delete_record.cc
index a669054..6a1c2e0 100644
--- a/src/starboard/shared/stub/storage_delete_record.cc
+++ b/src/starboard/shared/stub/storage_delete_record.cc
@@ -15,10 +15,10 @@
 #include "starboard/storage.h"
 
 bool SbStorageDeleteRecord(SbUser /*user*/
-#if SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION >= 6
                            ,
                            const char* /*name*/
-#endif  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION >= 6
                            ) {
   return false;
 }
diff --git a/src/starboard/shared/stub/storage_open_record.cc b/src/starboard/shared/stub/storage_open_record.cc
index b0f503e..378e9e7 100644
--- a/src/starboard/shared/stub/storage_open_record.cc
+++ b/src/starboard/shared/stub/storage_open_record.cc
@@ -15,10 +15,10 @@
 #include "starboard/storage.h"
 
 SbStorageRecord SbStorageOpenRecord(SbUser /*user*/
-#if SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION >= 6
                                     ,
                                     const char* /*name*/
-#endif  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION >= 6
                                     ) {
   return kSbStorageInvalidRecord;
 }
diff --git a/src/starboard/shared/stub/system_raise_platform_error.cc b/src/starboard/shared/stub/system_raise_platform_error.cc
index aad4c25..8380e52 100644
--- a/src/starboard/shared/stub/system_raise_platform_error.cc
+++ b/src/starboard/shared/stub/system_raise_platform_error.cc
@@ -27,7 +27,7 @@
     case kSbSystemPlatformErrorTypeConnectionError:
       message = "Connection error.";
       break;
-#if SB_API_VERSION < SB_PLATFORM_ERROR_CLEANUP_API_VERSION
+#if SB_API_VERSION < 6
     case kSbSystemPlatformErrorTypeUserSignedOut:
       message = "User is not signed in.";
       break;
diff --git a/src/starboard/shared/stub/time_zone_get_dst_name.cc b/src/starboard/shared/stub/time_zone_get_dst_name.cc
index 9d96599..35dad67 100644
--- a/src/starboard/shared/stub/time_zone_get_dst_name.cc
+++ b/src/starboard/shared/stub/time_zone_get_dst_name.cc
@@ -14,8 +14,8 @@
 
 #include "starboard/time_zone.h"
 
-#if SB_API_VERSION < SB_TIME_ZONE_FLEXIBLE_API_VERSION
+#if SB_API_VERSION < 6
 const char* SbTimeZoneGetDstName() {
   return "GMT";
 }
-#endif  // SB_API_VERSION < SB_TIME_ZONE_FLEXIBLE_API_VERSION
+#endif  // SB_API_VERSION < 6
diff --git a/src/starboard/shared/uwp/application_uwp.cc b/src/starboard/shared/uwp/application_uwp.cc
index ec9f438..2343b2a 100644
--- a/src/starboard/shared/uwp/application_uwp.cc
+++ b/src/starboard/shared/uwp/application_uwp.cc
@@ -84,8 +84,8 @@
 
 namespace {
 
-const HdcpProtection kHDCPProtectionMode =
-    HdcpProtection::OnWithTypeEnforcement;
+// Per Microsoft, HdcpProtection::On means HDCP 1.x required.
+const HdcpProtection kHDCPProtectionMode = HdcpProtection::On;
 
 const int kWinSockVersionMajor = 2;
 const int kWinSockVersionMinor = 2;
diff --git a/src/starboard/shared/x11/application_x11.cc b/src/starboard/shared/x11/application_x11.cc
index 387cb37..d9d156b 100644
--- a/src/starboard/shared/x11/application_x11.cc
+++ b/src/starboard/shared/x11/application_x11.cc
@@ -609,7 +609,7 @@
   if (state & ShiftMask) {
     key_modifiers |= kSbKeyModifiersShift;
   }
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
   if (state & Button1Mask) {
     key_modifiers |= kSbKeyModifiersPointerButtonLeft;
   }
@@ -629,7 +629,7 @@
   return key_modifiers;
 }
 
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
 SbInputVector XButtonEventToSbInputVectorDelta(XButtonEvent* event) {
   SbInputVector delta = {0, 0};
   switch (event->button) {
@@ -1175,7 +1175,7 @@
       XButtonEvent* x_button_event = reinterpret_cast<XButtonEvent*>(x_event);
       bool is_press_event = ButtonPress == x_event->type;
       bool is_wheel_event = XButtonEventIsWheelEvent(x_button_event);
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
       if (is_wheel_event && !is_press_event) {
         // unpress events from the wheel are discarded.
         return NULL;
@@ -1190,7 +1190,7 @@
           is_press_event ? kSbInputEventTypePress : kSbInputEventTypeUnpress;
       data->device_type = kSbInputDeviceTypeMouse;
       if (is_wheel_event) {
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
         data->pressure = NAN;
         data->size = {NAN, NAN};
         data->tilt = {NAN, NAN};
@@ -1215,7 +1215,7 @@
       SbMemorySet(data.get(), 0, sizeof(*data));
       data->window = FindWindow(x_motion_event->window);
       SB_DCHECK(SbWindowIsValid(data->window));
-#if SB_API_VERSION >= SB_POINTER_INPUT_API_VERSION
+#if SB_API_VERSION >= 6
       data->pressure = NAN;
       data->size = {NAN, NAN};
       data->tilt = {NAN, NAN};
diff --git a/src/starboard/shared/x11/application_x11.h b/src/starboard/shared/x11/application_x11.h
index 48d32d7..ee9fe6a 100644
--- a/src/starboard/shared/x11/application_x11.h
+++ b/src/starboard/shared/x11/application_x11.h
@@ -59,10 +59,10 @@
                    int width,
                    int height) SB_OVERRIDE;
 
-#if SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#if SB_API_VERSION >= 6
   bool IsStartImmediate() SB_OVERRIDE { return !HasPreloadSwitch(); }
   bool IsPreloadImmediate() SB_OVERRIDE { return HasPreloadSwitch(); }
-#endif  // SB_API_VERSION >= SB_PRELOAD_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
  protected:
   // --- Application overrides ---
diff --git a/src/starboard/storage.h b/src/starboard/storage.h
index 33ba547..c3d9963 100644
--- a/src/starboard/storage.h
+++ b/src/starboard/storage.h
@@ -51,7 +51,7 @@
   return record != kSbStorageInvalidRecord;
 }
 
-#if SB_API_VERSION < SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION < 6
 
 // Opens and returns the default SbStorageRecord for |user|, blocking I/O on the
 // calling thread until the open is completed. If |user| is not a valid
@@ -62,7 +62,7 @@
 // |user|: The user for which the storage record will be opened.
 SB_EXPORT SbStorageRecord SbStorageOpenRecord(SbUser user);
 
-#else  // SB_API_VERSION < SB_STORAGE_NAMES_API_VERSION
+#else  // SB_API_VERSION < 6
 
 // Opens and returns the SbStorageRecord for |user| named |name|, blocking I/O
 // on the calling thread until the open is completed. If |user| is not a valid
@@ -77,7 +77,7 @@
 // |name|: The filesystem-safe name of the record to open.
 SB_EXPORT SbStorageRecord SbStorageOpenRecord(SbUser user, const char* name);
 
-#endif  // SB_API_VERSION < SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION < 6
 
 // Closes |record|, synchronously ensuring that all written data is flushed.
 // This function performs blocking I/O on the calling thread.
@@ -131,7 +131,7 @@
                                     const char* data,
                                     int64_t data_size);
 
-#if SB_API_VERSION < SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION < 6
 
 // Deletes the default |SbStorageRecord| for the |user|. The return value
 // indicates whether the record existed and was successfully deleted. If the
@@ -143,7 +143,7 @@
 // |user|: The user for whom the record will be deleted.
 SB_EXPORT bool SbStorageDeleteRecord(SbUser user);
 
-#else  // SB_API_VERSION < SB_STORAGE_NAMES_API_VERSION
+#else  // SB_API_VERSION < 6
 
 // Deletes the |SbStorageRecord| for |user| named |name|. The return value
 // indicates whether the record existed and was successfully deleted. If the
@@ -159,7 +159,7 @@
 // |name|: The filesystem-safe name of the record to open.
 SB_EXPORT bool SbStorageDeleteRecord(SbUser user, const char* name);
 
-#endif  // SB_API_VERSION < SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION < 6
 
 #ifdef __cplusplus
 }  // extern "C"
@@ -183,7 +183,7 @@
     Initialize();
   }
 
-#if SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION >= 6
   explicit StorageRecord(const char* name)
       : user_(SbUserGetCurrent()),
         name_(name),
@@ -195,7 +195,7 @@
       : user_(user), name_(name), record_(kSbStorageInvalidRecord) {
     Initialize();
   }
-#endif  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION >= 6
 
   ~StorageRecord() { Close(); }
   bool IsValid() { return SbStorageIsValidRecord(record_); }
@@ -219,36 +219,36 @@
 
   bool Delete() {
     Close();
-#if SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION >= 6
     if (!name_.empty()) {
       return SbStorageDeleteRecord(user_, name_.c_str());
     } else {
       return SbStorageDeleteRecord(user_, NULL);
     }
-#else   // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#else   // SB_API_VERSION >= 6
     return SbStorageDeleteRecord(user_);
-#endif  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION >= 6
   }
 
  private:
   void Initialize() {
     if (SbUserIsValid(user_)) {
-#if SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION >= 6
       if (!name_.empty()) {
         record_ = SbStorageOpenRecord(user_, name_.c_str());
       } else {
         record_ = SbStorageOpenRecord(user_, NULL);
       }
-#else   // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#else   // SB_API_VERSION >= 6
       record_ = SbStorageOpenRecord(user_);
-#endif  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION >= 6
     }
   }
 
   SbUser user_;
-#if SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#if SB_API_VERSION >= 6
   std::string name_;
-#endif  // SB_API_VERSION >= SB_STORAGE_NAMES_API_VERSION
+#endif  // SB_API_VERSION >= 6
   SbStorageRecord record_;
 };
 
diff --git a/src/starboard/system.h b/src/starboard/system.h
index cfa9eed..3a4444e 100644
--- a/src/starboard/system.h
+++ b/src/starboard/system.h
@@ -185,7 +185,7 @@
   // retried, otherwise the app should be stopped.
   kSbSystemPlatformErrorTypeConnectionError,
 
-#if SB_API_VERSION < SB_PLATFORM_ERROR_CLEANUP_API_VERSION
+#if SB_API_VERSION < 6
   // The current user is not signed in.
   kSbSystemPlatformErrorTypeUserSignedOut,
 
diff --git a/src/starboard/time_zone.h b/src/starboard/time_zone.h
index e3bf9c6..b4aec2e 100644
--- a/src/starboard/time_zone.h
+++ b/src/starboard/time_zone.h
@@ -35,7 +35,7 @@
 // Gets the system's current SbTimeZone in minutes.
 SB_EXPORT SbTimeZone SbTimeZoneGetCurrent();
 
-#if SB_API_VERSION < SB_TIME_ZONE_FLEXIBLE_API_VERSION
+#if SB_API_VERSION < 6
 // Gets the three-letter code of the current timezone in standard time,
 // regardless of current Daylight Savings Time status. (e.g. "PST")
 #else
@@ -48,11 +48,11 @@
 #endif
 SB_EXPORT const char* SbTimeZoneGetName();
 
-#if SB_API_VERSION < SB_TIME_ZONE_FLEXIBLE_API_VERSION
+#if SB_API_VERSION < 6
 // Gets the three-letter code of the current timezone in Daylight Savings Time,
 // regardless of current DST status. (e.g. "PDT")
 SB_EXPORT const char* SbTimeZoneGetDstName();
-#endif  // SB_API_VERSION < SB_TIME_ZONE_FLEXIBLE_API_VERSION
+#endif  // SB_API_VERSION < 6
 
 #ifdef __cplusplus
 }  // extern "C"
