diff --git a/buildbot/constants.py b/buildbot/constants.py
index d502471..4c662ae 100644
--- a/buildbot/constants.py
+++ b/buildbot/constants.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
+# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
@@ -47,8 +47,8 @@
 # revsion of the Chromium src tree and build with that checkout.
 CHROME_REV_TOT = 'tot'
 
-# Builds and validates _alpha ebuilds.  These builds sync to a particular
-# revsion of the Chromium src tree and build with that checkout.
+# Builds and validates chrome at a given revision through cbuildbot
+# --chrome_version
 CHROME_REV_SPEC = 'spec'
 
 # Builds and validates the latest Chromium release as defined by
diff --git a/buildbot/cros_mark_chrome_as_stable.py b/buildbot/cros_mark_chrome_as_stable.py
index 596c94c..2a10130 100755
--- a/buildbot/cros_mark_chrome_as_stable.py
+++ b/buildbot/cros_mark_chrome_as_stable.py
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 
-# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
+# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
@@ -243,7 +243,8 @@
     stable_ebuilds: A list of stable ebuilds.
     chrome_rev: The chrome_rev designating which candidate to find.
     sticky_branch:  The the branch that is currently sticky with Major/Minor
-      components.  For example: 9.0.553
+      components.  For example: 9.0.553. Can be None but not if chrome_rev
+      is CHROME_REV_STICKY.
   Returns:
     Returns the EBuild, otherwise None if none found.
   """
@@ -258,6 +259,7 @@
         candidates.append(ebuild)
 
   elif chrome_rev == constants.CHROME_REV_STICKY:
+    assert sticky_branch is not None
     chrome_branch_re = re.compile('%s\..*' % sticky_branch)
     for ebuild in stable_ebuilds:
       if chrome_branch_re.search(ebuild.version):
@@ -266,8 +268,7 @@
   else:
     chrome_branch_re = re.compile('%s.*_rc.*' % _CHROME_VERSION_REGEX)
     for ebuild in stable_ebuilds:
-      if chrome_branch_re.search(ebuild.version) and (
-          not ebuild.chrome_version.startswith(sticky_branch)):
+      if chrome_branch_re.search(ebuild.version):
         candidates.append(ebuild)
 
   if candidates:
@@ -362,8 +363,7 @@
                                              new_chrome.chrome_version)
 
 def MarkChromeEBuildAsStable(stable_candidate, unstable_ebuild, chrome_rev,
-                             chrome_version, commit, overlay_dir,
-                             sticky_ebuild):
+                             chrome_version, commit, overlay_dir):
   """Uprevs the chrome ebuild specified by chrome_rev.
 
   This is the main function that uprevs the chrome_rev from a stable candidate
@@ -387,7 +387,6 @@
     chrome_version:  The \d.\d.\d.\d version of Chrome.
     commit:  Used with constants.CHROME_REV_TOT.  The svn revision of chrome.
     overlay_dir:  Path to the chromeos-chrome package dir.
-    sticky_ebuild: EBuild class for the sticky ebuild.
   Returns:
     Full portage version atom (including rc's, etc) that was revved.
   """
@@ -446,7 +445,7 @@
                                                 chrome_rev))
 
   RunCommand(['git', 'add', new_ebuild_path])
-  if stable_candidate and stable_candidate != sticky_ebuild:
+  if stable_candidate and not stable_candidate.IsSticky():
     RunCommand(['git', 'rm', stable_candidate.ebuild_path])
 
   portage_utilities.EBuild.CommitChange(
@@ -490,11 +489,9 @@
   chrome_rev = args[0]
   version_to_uprev = None
   commit_to_use = None
+  sticky_branch = None
 
   (unstable_ebuild, stable_ebuilds) = FindChromeCandidates(overlay_dir)
-  sticky_ebuild = _GetStickyEBuild(stable_ebuilds)
-  sticky_version = sticky_ebuild.chrome_version
-  sticky_branch = sticky_version.rpartition('.')[0]
 
   if chrome_rev == constants.CHROME_REV_LOCAL:
     if 'CHROME_ROOT' in os.environ:
@@ -506,7 +503,6 @@
     commit_to_use = 'Unknown'
     Info('Using local source, versioning is untrustworthy.')
   elif chrome_rev == constants.CHROME_REV_SPEC:
-    # TODO(sosa): Buildbot may pass url@revision, check and fix commit.
     commit_to_use = options.force_revision
     if '@' in commit_to_use: commit_to_use = ParseMaxRevision(commit_to_use)
     version_to_uprev = _GetSpecificVersionUrl(options.chrome_url,
@@ -517,11 +513,10 @@
                                               commit_to_use)
   elif chrome_rev == constants.CHROME_REV_LATEST:
     version_to_uprev = _GetLatestRelease(options.chrome_url)
-    # Don't rev on stable branch for latest_release.
-    if re.match('%s\.\d+' % sticky_branch, version_to_uprev):
-      Info('Latest release is sticky branch.  Nothing to do.')
-      return
   else:
+    sticky_ebuild = _GetStickyEBuild(stable_ebuilds)
+    sticky_version = sticky_ebuild.chrome_version
+    sticky_branch = sticky_version.rpartition('.')[0]
     version_to_uprev = _GetLatestRelease(options.chrome_url, sticky_branch)
 
   stable_candidate = FindChromeUprevCandidate(stable_ebuilds, chrome_rev,
@@ -539,7 +534,7 @@
   work_branch.CreateBranch()
   chrome_version_atom = MarkChromeEBuildAsStable(
       stable_candidate, unstable_ebuild, chrome_rev, version_to_uprev,
-      commit_to_use, overlay_dir, sticky_ebuild)
+      commit_to_use, overlay_dir)
   # Explicit print to communicate to caller.
   if chrome_version_atom:
     cros_mark_as_stable.CleanStalePackages(options.board, [chrome_version_atom])
diff --git a/buildbot/cros_mark_chrome_as_stable_unittest.py b/buildbot/cros_mark_chrome_as_stable_unittest.py
index 8cc314b..bcea1d2 100755
--- a/buildbot/cros_mark_chrome_as_stable_unittest.py
+++ b/buildbot/cros_mark_chrome_as_stable_unittest.py
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 
-# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
+# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
@@ -308,7 +308,6 @@
     self.mox.StubOutWithMock(portage_utilities.EBuild, 'CommitChange')
     stable_candidate = cros_mark_chrome_as_stable.ChromeEBuild(old_ebuild_path)
     unstable_ebuild = cros_mark_chrome_as_stable.ChromeEBuild(self.unstable)
-    sticky_ebuild = cros_mark_chrome_as_stable.ChromeEBuild(self.sticky)
     chrome_version = new_version
     commit = None
     overlay_dir = self.mock_chrome_dir
@@ -321,7 +320,7 @@
     self.mox.ReplayAll()
     cros_mark_chrome_as_stable.MarkChromeEBuildAsStable(
         stable_candidate, unstable_ebuild, chrome_rev, chrome_version, commit,
-        overlay_dir, sticky_ebuild)
+        overlay_dir)
     self.mox.VerifyAll()
 
   def testStickyMarkAsStable(self):
diff --git a/buildbot/portage_utilities.py b/buildbot/portage_utilities.py
index 7fdc9dc..c78e815 100644
--- a/buildbot/portage_utilities.py
+++ b/buildbot/portage_utilities.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
+# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
@@ -117,6 +117,10 @@
       command, redirect_stdout=True, print_cmd=cls.verbose, shell=True)
     return command_result.output
 
+  def IsSticky(self):
+    """Returns True if the ebuild is sticky."""
+    return self.is_stable and self.current_revision == 0
+
   @classmethod
   def MarkAsStable(cls, unstable_ebuild_path, new_stable_ebuild_path,
                    commit_keyword, commit_value, redirect_file=None,
