diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,10 @@
+concurrent-output (1.6.1) unstable; urgency=medium
+
+  * Avoid cursorUpLine, which is not as portable as cursorUp.
+    This fixes display on such systems as MS-DOS with ANSI.SYS, and OSX.
+
+ -- Joey Hess <id@joeyh.name>  Sun, 08 Nov 2015 17:56:43 -0400
+
 concurrent-output (1.6.0) unstable; urgency=medium
 
   * Generalized newConsoleRegion. 
diff --git a/System/Console/Regions.hs b/System/Console/Regions.hs
--- a/System/Console/Regions.hs
+++ b/System/Console/Regions.hs
@@ -560,7 +560,8 @@
 		-- Some lines were removed. Move up that many lines,
 		-- clearing each line, and update any changed lines.
 		replicateM_ (abs delta) $ do
-			cursorUpLine 1
+			setCursorColumn 0
+			cursorUp 1
 			clearLine
 		diffUpdate (drop (abs delta) origlines) newlines
   where
@@ -585,7 +586,8 @@
 	| null l' = noop
 	| otherwise = do
 		forM_ l' $ \((newt, offset), oldt) -> do
-			cursorUpLine offset
+			setCursorColumn 0
+			cursorUp offset
 #ifndef mingw32_HOST_OS
 			T.hPutStr stdout $
 				genLineUpdate $ calcLineUpdate oldt newt
@@ -596,7 +598,7 @@
 			T.hPutStr stdout newt
 			clearFromCursorToLineEnd
 #endif
-		cursorDownLine (sum (map (snd . fst) l'))
+		cursorDown (sum (map (snd . fst) l'))
 		setCursorColumn 0
 		hFlush stdout
   where
@@ -619,8 +621,9 @@
 inAreaAbove :: Bool -> Int -> [Text] -> IO () -> IO ()
 inAreaAbove isterm numlines ls outputter = do
 	when isterm $ do
-		unless (numlines < 1) $
-			cursorUpLine $ numlines
+		unless (numlines < 1) $ do
+			setCursorColumn 0
+			cursorUp $ numlines
 		clearFromCursorToScreenEnd
 	-- Flush stdout now, because the outputter may write to stderr, so
 	-- the cursor needs to be moved first.
diff --git a/concurrent-output.cabal b/concurrent-output.cabal
--- a/concurrent-output.cabal
+++ b/concurrent-output.cabal
@@ -1,5 +1,5 @@
 Name: concurrent-output
-Version: 1.6.0
+Version: 1.6.1
 Cabal-Version: >= 1.8
 License: BSD2
 Maintainer: Joey Hess <id@joeyh.name>
