diff --git a/lib/spack/spack/cmd/stage.py b/lib/spack/spack/cmd/stage.py
index 1bf1f93c2fbd20a397ec1498d6a44d6c910db513..7b21faa721d373ed117cbaf07506b75db52ce2b0 100644
--- a/lib/spack/spack/cmd/stage.py
+++ b/lib/spack/spack/cmd/stage.py
@@ -23,6 +23,9 @@
 # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 ##############################################################################
 import argparse
+import os
+
+import llnl.util.tty as tty
 
 import spack
 import spack.cmd
@@ -33,18 +36,45 @@ def setup_parser(subparser):
     subparser.add_argument(
         '-n', '--no-checksum', action='store_true', dest='no_checksum',
         help="Do not check downloaded packages against checksum")
+
+    dir_parser = subparser.add_mutually_exclusive_group()
+    dir_parser.add_argument(
+        '-d', '--stage-dir', action='store_const', dest='print_dir',
+        const='stage', help="Prints out the stage directory for a spec.")
+    dir_parser.add_argument(
+        '-b', '--build-dir', action='store_const', dest='print_dir',
+        const='build', help="Prints out the expanded archive path for a spec.")
+
     subparser.add_argument(
-        'packages', nargs=argparse.REMAINDER, help="specs of packages to stage")
+        'specs', nargs=argparse.REMAINDER, help="specs of packages to stage")
 
 
 def stage(parser, args):
-    if not args.packages:
+    if not args.specs:
         tty.die("stage requires at least one package argument")
 
     if args.no_checksum:
         spack.do_checksum = False
 
-    specs = spack.cmd.parse_specs(args.packages, concretize=True)
-    for spec in specs:
-        package = spack.db.get(spec)
-        package.do_stage()
+    specs = spack.cmd.parse_specs(args.specs, concretize=True)
+
+    if args.print_dir:
+        if len(specs) != 1:
+            tty.die("--stage-dir and --build-dir options only take one spec.")
+
+        spec = specs[0]
+        pkg = spack.db.get(spec)
+
+        if args.print_dir == 'stage':
+            print pkg.stage.path
+        elif args.print_dir == 'build':
+            if not os.listdir(pkg.stage.path):
+                tty.die("Stage directory is empty.  Run this first:",
+                        "spack stage " + " ".join(args.specs))
+            print pkg.stage.expanded_archive_path
+
+    else:
+        for spec in specs:
+            package = spack.db.get(spec)
+            package.do_stage()
+