diff --git a/pandoc.cabal b/pandoc.cabal
index 57a8f6020..da9d005ef 100644
--- a/pandoc.cabal
+++ b/pandoc.cabal
@@ -442,6 +442,9 @@ Executable pandoc
   Ghc-Prof-Options: -fprof-auto-exported -rtsopts -with-rtsopts=-K16m
   if os(windows)
     Cpp-options:      -D_WINDOWS
+  else
+    Build-Depends:  unix >= 2.4 && < 2.8
+
   Default-Language: Haskell98
   Other-Extensions: PatternGuards, OverloadedStrings,
                     ScopedTypeVariables, GeneralizedNewtypeDeriving,
diff --git a/pandoc.hs b/pandoc.hs
index 4f87947e7..541d17ef3 100644
--- a/pandoc.hs
+++ b/pandoc.hs
@@ -74,6 +74,10 @@ import Text.Pandoc.Readers.Txt2Tags (getT2TMeta)
 import Paths_pandoc (getDataDir)
 import Text.Printf (printf)
 import Text.Pandoc.Error
+#ifndef _WINDOWS
+import System.Posix.Terminal (queryTerminal)
+import System.Posix.IO (stdOutput)
+#endif
 
 type Transform = Pandoc -> Pandoc
 
@@ -1357,7 +1361,12 @@ convertWithOpts opts args = do
                       , readerFileScope   = fileScope
                       }
 
-  when (not (isTextFormat format) && outputFile == "-") $
+#ifdef _WINDOWS
+  let istty = True
+#else
+  istty <- queryTerminal stdOutput
+#endif
+  when (istty && not (isTextFormat format) && outputFile == "-") $
     err 5 $ "Cannot write " ++ format ++ " output to stdout.\n" ++
             "Specify an output file using the -o option."
 
@@ -1457,8 +1466,9 @@ convertWithOpts opts args = do
            applyTransforms transforms >=>
            applyFilters datadir filters' [format]) doc
 
-  let writeBinary :: B.ByteString -> IO ()
-      writeBinary = B.writeFile (UTF8.encodePath outputFile)
+  let writeFnBinary :: FilePath -> B.ByteString -> IO ()
+      writeFnBinary "-" = B.putStr
+      writeFnBinary f   = B.writeFile (UTF8.encodePath f)
 
   let writerFn :: FilePath -> String -> IO ()
       writerFn "-" = UTF8.putStr
@@ -1466,7 +1476,7 @@ convertWithOpts opts args = do
 
   case writer of
     IOStringWriter f -> f writerOptions doc' >>= writerFn outputFile
-    IOByteStringWriter f -> f writerOptions doc' >>= writeBinary
+    IOByteStringWriter f -> f writerOptions doc' >>= writeFnBinary outputFile
     PureStringWriter f
       | pdfOutput -> do
               -- make sure writer is latex or beamer or context or html5
@@ -1486,7 +1496,7 @@ convertWithOpts opts args = do
 
               res <- makePDF pdfprog f writerOptions doc'
               case res of
-                   Right pdf -> writeBinary pdf
+                   Right pdf -> writeFnBinary outputFile pdf
                    Left err' -> do
                      B.hPutStr stderr err'
                      B.hPut stderr $ B.pack [10]