diff --git a/htools/Ganeti/HTools/CLI.hs b/htools/Ganeti/HTools/CLI.hs
index 442fd432616bf2cb3402264aa9f552f4d9e7788c..4e801fd3d04289ed689c8050a35be7d7981abee8 100644
--- a/htools/Ganeti/HTools/CLI.hs
+++ b/htools/Ganeti/HTools/CLI.hs
@@ -134,7 +134,7 @@ data Options = Options
   , optShowInsts   :: Bool           -- ^ Whether to show the instance map
   , optShowNodes   :: Maybe [String] -- ^ Whether to show node status
   , optShowVer     :: Bool           -- ^ Just show the program version
-  , optStdSpec     :: RSpec          -- ^ Requested standard specs
+  , optStdSpec     :: Maybe RSpec    -- ^ Requested standard specs
   , optTieredSpec  :: Maybe RSpec    -- ^ Requested specs for tiered mode
   , optReplay      :: Maybe String   -- ^ Unittests: RNG state
   , optVerbose     :: Int            -- ^ Verbosity level
@@ -173,7 +173,7 @@ defaultOptions  = Options
   , optShowInsts   = False
   , optShowNodes   = Nothing
   , optShowVer     = False
-  , optStdSpec     = RSpec 1 4096 102400
+  , optStdSpec     = Nothing
   , optTieredSpec  = Nothing
   , optReplay      = Nothing
   , optVerbose     = 1
@@ -383,7 +383,7 @@ oStdSpec :: OptType
 oStdSpec = Option "" ["standard-alloc"]
              (ReqArg (\ inp opts -> do
                         tspec <- parseISpecString "standard" inp
-                        return $ opts { optStdSpec = tspec } )
+                        return $ opts { optStdSpec = Just tspec } )
               "STDSPEC")
              "enable standard specs allocation, given as 'disk,ram,cpu'"
 
diff --git a/htools/Ganeti/HTools/Program/Hspace.hs b/htools/Ganeti/HTools/Program/Hspace.hs
index e5185c3ec896653de23b4da73bf8ce3b2b430a21..f1f281bbd9b23f2f20c7c5e61eafd749efd1f97f 100644
--- a/htools/Ganeti/HTools/Program/Hspace.hs
+++ b/htools/Ganeti/HTools/Program/Hspace.hs
@@ -29,6 +29,7 @@ import Control.Monad
 import Data.Char (toUpper, isAlphaNum, toLower)
 import Data.Function (on)
 import Data.List
+import Data.Maybe (fromMaybe)
 import Data.Ord (comparing)
 import System.Exit
 import System.IO
@@ -398,12 +399,11 @@ main = do
          exitWith $ ExitFailure 1
 
   let verbose = optVerbose opts
-      ispec = optStdSpec opts
       disk_template = optDiskTemplate opts
       req_nodes = Instance.requiredNodes disk_template
       machine_r = optMachineReadable opts
 
-  orig_cdata@(ClusterData gl fixed_nl il _ _) <- loadExternalData opts
+  orig_cdata@(ClusterData gl fixed_nl il _ ipol) <- loadExternalData opts
   nl <- setNodeStatus opts fixed_nl
 
   let num_instances = Container.size il
@@ -431,21 +431,24 @@ main = do
 
   allocnodes <- exitIfBad $ Cluster.genAllocNodes gl nl req_nodes True
 
-  -- Run the tiered allocation, if enabled
+  -- Run the tiered allocation
 
-  case optTieredSpec opts of
-    Nothing -> return ()
-    Just tspec -> do
-         (treason, trl_nl, _, spec_map) <-
-           runAllocation cdata stop_allocation
-             (Cluster.tieredAlloc nl il alloclimit
-              (instFromSpec tspec disk_template) allocnodes [] [])
-             tspec SpecTiered opts
+  let tspec = fromMaybe (rspecFromISpec (iPolicyMaxSpec ipol))
+              (optTieredSpec opts)
 
-         printTiered machine_r spec_map (optMcpu opts) nl trl_nl treason
+  (treason, trl_nl, _, spec_map) <-
+    runAllocation cdata stop_allocation
+       (Cluster.tieredAlloc nl il alloclimit
+        (instFromSpec tspec disk_template) allocnodes [] [])
+       tspec SpecTiered opts
+
+  printTiered machine_r spec_map (optMcpu opts) nl trl_nl treason
 
   -- Run the standard (avg-mode) allocation
 
+  let ispec = fromMaybe (rspecFromISpec (iPolicyStdSpec ipol))
+              (optStdSpec opts)
+
   (sreason, fin_nl, allocs, _) <-
       runAllocation cdata stop_allocation
             (Cluster.iterateAlloc nl il alloclimit
@@ -454,4 +457,6 @@ main = do
 
   printResults machine_r nl fin_nl num_instances allocs sreason
 
+  -- Print final result
+
   printFinal machine_r
diff --git a/man/hspace.rst b/man/hspace.rst
index 70f55c0e985230724762ad90f4b71bc256bc538d..a4878340933b9cfc97738a74e497c06514b95de0 100644
--- a/man/hspace.rst
+++ b/man/hspace.rst
@@ -44,7 +44,6 @@ Output options:
 DESCRIPTION
 -----------
 
-
 hspace computes how many additional instances can be fit on a cluster,
 while maintaining N+1 status.
 
@@ -61,6 +60,10 @@ it is intended to interpreted as a shell fragment (or parsed as a
 output the additional information on stderr (such that the stdout is
 still parseable).
 
+By default, the instance specifications will be read from the cluster;
+the options ``--standard-alloc`` and ``--tiered-alloc`` can be used to
+override them.
+
 The following keys are available in the machine-readable output of the
 script (all prefixed with *HTS_*):
 
@@ -132,14 +135,13 @@ INI_MNODE_DSK_AVAIL, FIN_MNODE_DSK_AVAIL
   Like the above but for disk.
 
 TSPEC
-  If the tiered allocation mode has been enabled, this parameter holds
-  the pairs of specifications and counts of instances that can be
-  created in this mode. The value of the key is a space-separated list
-  of values; each value is of the form *memory,disk,vcpu=count* where
-  the memory, disk and vcpu are the values for the current spec, and
-  count is how many instances of this spec can be created. A complete
-  value for this variable could be: **4096,102400,2=225
-  2560,102400,2=20 512,102400,2=21**.
+  This parameter holds the pairs of specifications and counts of
+  instances that can be created in the *tiered allocation* mode. The
+  value of the key is a space-separated list of values; each value is of
+  the form *memory,disk,vcpu=count* where the memory, disk and vcpu are
+  the values for the current spec, and count is how many instances of
+  this spec can be created. A complete value for this variable could be:
+  **4096,102400,2=225 2560,102400,2=20 512,102400,2=21**.
 
 KM_USED_CPU, KM_USED_NPU, KM_USED_MEM, KM_USED_DSK
   These represents the metrics of used resources at the start of the
@@ -189,9 +191,8 @@ OK
   that the computation failed and any values present should not be
   relied upon.
 
-If the tiered allocation mode is enabled, then many of the INI_/FIN_
-metrics will be also displayed with a TRL_ prefix, and denote the
-cluster status at the end of the tiered allocation run.
+Many of the INI_/FIN_ metrics will be also displayed with a TRL_ prefix,
+and denote the cluster status at the end of the tiered allocation run.
 
 The human output format should be self-explanatory, so it is not
 described further.
@@ -274,9 +275,9 @@ The options that can be passed to the program are as follows:
   about the description, see the man page **htools**(1).
 
 --standard-alloc *disk,ram,cpu*
-  This option specifies the instance size for the *standard* allocation
-  mode, where we simply allocate instances of the same, fixed size until
-  the cluster runs out of space.
+  This option overrides the instance size read from the cluster for the
+  *standard* allocation mode, where we simply allocate instances of the
+  same, fixed size until the cluster runs out of space.
 
   The specification given is similar to the *--simulate* option and it
   holds:
@@ -289,19 +290,19 @@ The options that can be passed to the program are as follows:
   specification of 100GB of disk space, 4GiB of memory and 2 VCPUs.
 
 --tiered-alloc *disk,ram,cpu*
-  Besides the standard, fixed-size allocation, also do a tiered
-  allocation scheme where the algorithm starts from the given
-  specification and allocates until there is no more space; then it
-  decreases the specification and tries the allocation again. The
-  decrease is done on the metric that last failed during allocation. The
-  argument should have the same format as for ``-standard-alloc``.
+  This option overrides the instance size for the *tiered* allocation
+  mode. In this mode, the algorithm starts from the given specification
+  and allocates until there is no more space; then it decreases the
+  specification and tries the allocation again. The decrease is done on
+  the metric that last failed during allocation. The argument should
+  have the same format as for ``--standard-alloc``.
 
   Also note that the normal allocation and the tiered allocation are
   independent, and both start from the initial cluster state; as such,
   the instance count for these two modes are not related one to
   another.
 
---machines-readable[=*choice*]
+--machine-readable[=*choice*]
   By default, the output of the program is in "human-readable" format,
   i.e. text descriptions. By passing this flag you can either enable
   (``--machine-readable`` or ``--machine-readable=yes``) or explicitly