diff --git a/xbuddy.py b/xbuddy.py
index 36cc8b2..384de49 100644
--- a/xbuddy.py
+++ b/xbuddy.py
@@ -267,16 +267,18 @@
     except ConfigParser.Error:
       return 5
 
-  def _LookupAlias(self, alias, board, version):
+  def LookupAlias(self, alias, board=None, version=None):
     """Given the full xbuddy config, look up an alias for path rewrite.
 
     Args:
       alias: The xbuddy path that could be one of the aliases in the
         rewrite table.
       board: The board to fill in with when paths are rewritten. Can be from
-        the update request xml or the default board from devserver.
+        the update request xml or the default board from devserver. If None,
+        defers to the value given during XBuddy initialization.
       version: The version to fill in when rewriting paths. Could be a specific
-        version number or a version alias like LATEST.
+        version number or a version alias like LATEST. If None, defers to the
+        value given during XBuddy initialization, or LATEST.
 
     Returns:
       A pair (val, suffix) where val is the rewritten path, or the original
@@ -301,7 +303,8 @@
       # Fill in the board and version.
       val = val.replace("BOARD", "%(board)s")
       val = val.replace("VERSION", "%(version)s")
-      val = val % {'board': board, 'version': version}
+      val = val % {'board': board or self._board,
+                   'version': version or self._version or LATEST}
 
     _Log("Path is %s, location suffix is %s", val, suffix)
     return val, suffix
@@ -737,7 +740,8 @@
     default_board = self._board if self._board else board
     default_version = self._version or version or LATEST
     # Rewrite the path if there is an appropriate default.
-    path, suffix = self._LookupAlias(path, default_board, default_version)
+    path, suffix = self.LookupAlias(path, board=default_board,
+                                    version=default_version)
     # Parse the path.
     image_type, board, version, is_local = self._InterpretPath(
         path, default_board, default_version)
diff --git a/xbuddy_unittest.py b/xbuddy_unittest.py
index 16cccb3..c5e7ec3 100755
--- a/xbuddy_unittest.py
+++ b/xbuddy_unittest.py
@@ -77,7 +77,7 @@
     self.mox.VerifyAll()
 
   def testLookupAliasPathRewrite(self):
-    """Tests _LookupAlias of path rewrite, including keyword substitution."""
+    """Tests LookupAlias of path rewrite, including keyword substitution."""
     alias = 'foobar'
     path = 'remote/BOARD/VERSION/test'
     self.mox.StubOutWithMock(self.mock_xb.config, 'get')
@@ -86,10 +86,11 @@
     self.mock_xb.config.get('PATH_REWRITES', alias).AndReturn(path)
     self.mox.ReplayAll()
     self.assertEqual(('remote/parrot/1.2.3/test', '-release'),
-                     self.mock_xb._LookupAlias(alias, 'parrot', '1.2.3'))
+                     self.mock_xb.LookupAlias(alias, board='parrot',
+                                              version='1.2.3'))
 
   def testLookupAliasSuffix(self):
-    """Tests _LookupAlias of location suffix."""
+    """Tests LookupAlias of location suffix."""
     alias = 'foobar'
     suffix = '-random'
     self.mox.StubOutWithMock(self.mock_xb.config, 'get')
@@ -98,10 +99,11 @@
         ConfigParser.Error())
     self.mox.ReplayAll()
     self.assertEqual((alias, suffix),
-                     self.mock_xb._LookupAlias(alias, 'parrot', '1.2.3'))
+                     self.mock_xb.LookupAlias(alias, board='parrot',
+                                              version='1.2.3'))
 
   def testLookupAliasPathRewriteAndSuffix(self):
-    """Tests _LookupAlias with both path rewrite and suffix."""
+    """Tests LookupAlias with both path rewrite and suffix."""
     alias = 'foobar'
     path = 'remote/BOARD/VERSION/test'
     suffix = '-random'
@@ -110,7 +112,8 @@
     self.mock_xb.config.get('PATH_REWRITES', alias).AndReturn(path)
     self.mox.ReplayAll()
     self.assertEqual(('remote/parrot/1.2.3/test', suffix),
-                     self.mock_xb._LookupAlias(alias, 'parrot', '1.2.3'))
+                     self.mock_xb.LookupAlias(alias, board='parrot',
+                                              version='1.2.3'))
 
   def testResolveVersionToBuildId_Official(self):
     """Check _ResolveVersionToBuildId recognizes aliases for official builds."""
