diff --git a/cli/cros/cros_pinchrome.py b/cli/cros/cros_pinchrome.py
index 0c3db80..d1ce1bc 100644
--- a/cli/cros/cros_pinchrome.py
+++ b/cli/cros/cros_pinchrome.py
@@ -77,7 +77,7 @@
   Returns:
     The output of SplitPV.
   """
-  return package_info.SplitPV(portage_util.SplitEbuildPath(path)[2])
+  return package_info.parse(portage_util.SplitEbuildPath(path)[2])
 
 
 def RevertStableEBuild(dirname, rev):
@@ -257,7 +257,7 @@
       self.last = ChromeUprev(self.chrome_path, before=before)
     except UprevNotFound:
       raise StopIteration()
-    ver = self.last.from_parts.version + ' (%s)' % self.last.date
+    ver = self.last.from_parts.vr + ' (%s)' % self.last.date
     self.uprevs.append(self.last)
     return ver
 
@@ -440,7 +440,7 @@
                                       uprev_list, group_size=5)
     pin_version = uprev_list.uprevs[choice]
     commit_subject = ('Chrome: Pin to version %s' %
-                      pin_version.from_parts.version)
+                      pin_version.from_parts.vr)
 
     # Public branch.
     git.CreateBranch(overlay, self.branch_name, track=True,
diff --git a/lib/parser/package_info.py b/lib/parser/package_info.py
index 42c91ee..32674fa 100644
--- a/lib/parser/package_info.py
+++ b/lib/parser/package_info.py
@@ -30,7 +30,7 @@
 _pvr_re = re.compile(r'^(?P<pv>%s-%s)$' % (_pkg, _ver), re.VERBOSE)
 
 
-def SplitPV(pv, strict=True):
+def _SplitPV(pv, strict=True):
   """Takes a PV value and splits it into individual components.
 
   Deprecated, use parse() instead.
@@ -78,7 +78,7 @@
   else:
     category = chunks[0]
 
-  m = SplitPV(chunks[-1], strict=strict)
+  m = _SplitPV(chunks[-1], strict=strict)
   if strict and (category is None or m is None):
     return None
 
diff --git a/lib/portage_util.py b/lib/portage_util.py
index d6329f3..fcdb335 100644
--- a/lib/portage_util.py
+++ b/lib/portage_util.py
@@ -1335,12 +1335,12 @@
     if not os.path.exists(ebuild_path):
       raise PortageDBError("Package doesn't contain an ebuild file.")
 
-    split_pv = package_info.SplitPV(self.pf)
-    if split_pv is None:
+    split_pv = package_info.parse(self.pf)
+    if not split_pv.pv:
       raise PortageDBError('Package and version "%s" doesn\'t have a valid '
                            'format.' % self.pf)
     self.package = split_pv.package
-    self.version = split_pv.version
+    self.version = split_pv.vr
 
   def _ReadField(self, field_name):
     """Reads the contents of the file in the installed package directory.
diff --git a/lib/portage_util_unittest.py b/lib/portage_util_unittest.py
index 0e5ddd8..287db37 100644
--- a/lib/portage_util_unittest.py
+++ b/lib/portage_util_unittest.py
@@ -1330,9 +1330,9 @@
           # Invalid category.
           continue
         # Correct pkg.
-        pv = package_info.SplitPV(pkg)
+        pv = package_info.parse(pkg)
         key = '%s/%s' % (cat, pv.package)
-        self.fake_packages.append((key, pv.version))
+        self.fake_packages.append((key, pv.vr))
     # Add contents to with/files-1.
     osutils.WriteFile(
         os.path.join(fake_pkgdb_path, 'with', 'files-1', 'CONTENTS'),
diff --git a/licensing/licenses_lib.py b/licensing/licenses_lib.py
index 179b5cd..ff64fe8 100644
--- a/licensing/licenses_lib.py
+++ b/licensing/licenses_lib.py
@@ -385,9 +385,8 @@
     filename = os.path.basename(self.fullnamerev)
     license_path = os.path.join(COPYRIGHT_ATTRIBUTION_DIR,
                                 os.path.dirname(self.fullnamerev))
-    pv = package_info.SplitPV(filename)
-    pv_no_rev = '%s-%s' % (pv.package, pv.version_no_rev)
-    for filename in (pv.pv, pv_no_rev, pv.package):
+    pv = package_info.parse(filename)
+    for filename in (pv.pvr, pv.pv, pv.package):
       file_path = os.path.join(license_path, filename)
       logging.debug('Looking for override copyright attribution license in %s',
                     file_path)
