diff --git a/htools/Ganeti/HTools/IAlloc.hs b/htools/Ganeti/HTools/IAlloc.hs
index 7a9e01180205b7e3a2e0fa9cd550cf0270c98f79..3142755a14c82e0243e9b1144909f577040531a6 100644
--- a/htools/Ganeti/HTools/IAlloc.hs
+++ b/htools/Ganeti/HTools/IAlloc.hs
@@ -347,7 +347,9 @@ processRequest request =
 -- | Reads the request from the data file(s).
 readRequest :: FilePath -> IO Request
 readRequest fp = do
-  input_data <- readFile fp
+  input_data <- case fp of
+                  "-" -> getContents
+                  _   -> readFile fp
   case parseData input_data of
     Bad err -> do
       hPutStrLn stderr $ "Error: " ++ err
diff --git a/man/hail.rst b/man/hail.rst
index f3e4403b101c72b7e383307a1243cb93ff5af6fe..f426cfa55402b606d7a1f73bc28f628fc36f3707 100644
--- a/man/hail.rst
+++ b/man/hail.rst
@@ -24,6 +24,9 @@ state and the request details, and output (on stdout) a JSON-formatted
 response. In case of critical failures, the error message is printed
 on stderr and the exit code is changed to show failure.
 
+If the input file name is ``-`` (a single minus sign), then the request
+data will be read from *stdin*.
+
 ALGORITHM
 ~~~~~~~~~