diff --git a/CHANGES.txt b/CHANGES.txt
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,8 @@
 Changelog for ghcid
 
+0.6.7
+    #104, add --ignore-loaded flag for use with -fobject-code
+    #103, deal with new GHC error formatting
 0.6.6
     #89, exit sooner when the child process exits unexpectedly
     Add Eq instance for Ghci
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright Neil Mitchell 2014-2016.
+Copyright Neil Mitchell 2014-2017.
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/ghcid.cabal b/ghcid.cabal
--- a/ghcid.cabal
+++ b/ghcid.cabal
@@ -1,19 +1,19 @@
 cabal-version:      >= 1.18
 build-type:         Simple
 name:               ghcid
-version:            0.6.6
+version:            0.6.7
 license:            BSD3
 license-file:       LICENSE
 category:           Development
 author:             Neil Mitchell <ndmitchell@gmail.com>, jpmoresmau
 maintainer:         Neil Mitchell <ndmitchell@gmail.com>
-copyright:          Neil Mitchell 2014-2016
+copyright:          Neil Mitchell 2014-2017
 synopsis:           GHCi based bare bones IDE
 description:
     Either \"GHCi as a daemon\" or \"GHC + a bit of an IDE\". A very simple Haskell development tool which shows you the errors in your project and updates them whenever you save. Run @ghcid --topmost --command=ghci@, where @--topmost@ makes the window on top of all others (Windows only) and @--command@ is the command to start GHCi on your project (defaults to @ghci@ if you have a @.ghci@ file, or else to @cabal repl@).
 homepage:           https://github.com/ndmitchell/ghcid#readme
 bug-reports:        https://github.com/ndmitchell/ghcid/issues
-tested-with:        GHC==8.0.1, GHC==7.10.3, GHC==7.8.4, GHC==7.6.3
+tested-with:        GHC==8.2.1, GHC==8.0.2, GHC==7.10.3, GHC==7.8.4, GHC==7.6.3
 extra-doc-files:
     CHANGES.txt
     README.md
@@ -32,8 +32,7 @@
         directory,
         extra >= 1.2,
         process >= 1.1,
-        cmdargs >= 0.10,
-        terminal-size >= 0.3
+        cmdargs >= 0.10
     if os(windows)
         build-depends: Win32
     else
@@ -42,10 +41,9 @@
     exposed-modules:
         Language.Haskell.Ghcid
     other-modules:
-        Paths_ghcid,
-        Language.Haskell.Ghcid.Types,
-        Language.Haskell.Ghcid.Parser,
-        Language.Haskell.Ghcid.Terminal,
+        Paths_ghcid
+        Language.Haskell.Ghcid.Types
+        Language.Haskell.Ghcid.Parser
         Language.Haskell.Ghcid.Util
 
 executable ghcid
@@ -103,7 +101,15 @@
     else
         build-depends: unix
     other-modules:
-        Test.Parser
+        Ghcid
+        Language.Haskell.Ghcid
+        Language.Haskell.Ghcid.Parser
+        Language.Haskell.Ghcid.Terminal
+        Language.Haskell.Ghcid.Types
+        Language.Haskell.Ghcid.Util
+        Session
         Test.API
-        Test.Util
         Test.Ghcid
+        Test.Parser
+        Test.Util
+        Wait
diff --git a/src/Ghcid.hs b/src/Ghcid.hs
--- a/src/Ghcid.hs
+++ b/src/Ghcid.hs
@@ -46,6 +46,7 @@
     ,restart :: [FilePath]
     ,directory :: FilePath
     ,outputfile :: [FilePath]
+    ,ignoreLoaded :: Bool
     }
     deriving (Data,Typeable,Show)
 
@@ -65,6 +66,7 @@
     ,reload = [] &= typ "PATH" &= help "Reload when the given file or directory contents change (defaults to none)"
     ,directory = "." &= typDir &= name "C" &= help "Set the current directory"
     ,outputfile = [] &= typFile &= name "o" &= help "File to write the full output to"
+    ,ignoreLoaded = False &= explicit &= name "ignore-loaded" &= help "Keep going if no files are loaded. Requires --reload to be set."
     } &= verbosity &=
     program "ghcid" &= summary ("Auto reloading GHCi daemon v" ++ showVersion version)
 
@@ -115,7 +117,7 @@
                                 "stack exec --test -- ghci" : opts
                 in f flags $ "stack.yaml":cabal
               | ".ghci" `elem` files -> f ("ghci":opts) [".ghci"]
-              | cabal /= [] -> f (if arguments == [] then "cabal repl":map ("--ghc-options=" ++) opts else "cabal exec -- ghci":opts) cabal
+              | cabal /= [] -> f (if null arguments then "cabal repl":map ("--ghc-options=" ++) opts else "cabal exec -- ghci":opts) cabal
               | otherwise -> f ("ghci":opts) []
     where
         f c r = o{command = unwords $ c ++ map escape arguments, arguments = [], restart = restart ++ r}
@@ -178,6 +180,10 @@
                 | m@Message{} <- maybe [] snd load]
             termOutput $ load ++ map (Plain,) msg ++ replicate (height - (length load + length msg)) (Plain,"")
 
+    when (ignoreLoaded && null reload) $ do
+        putStrLn "--reload must be set when using --ignore-loaded"
+        exitFailure
+
     restartTimes <- mapM getModTime restart
     curdir <- getCurrentDirectory
 
@@ -208,8 +214,8 @@
             outputFill (Just (loadedCount, messages)) ["Running test..." | isJust test]
             forM_ outputfile $ \file ->
                 writeFile file $ unlines $ map snd $ prettyOutput loadedCount $ filter isMessage messages
-            when (null loaded) $ do
-                putStrLn $ "No files loaded, nothing to wait for. Fix the last error and restart."
+            when (null loaded && not ignoreLoaded) $ do
+                putStrLn "No files loaded, nothing to wait for. Fix the last error and restart."
                 exitFailure
             whenJust test $ \t -> do
                 whenLoud $ outStrLn $ "%TESTING: " ++ t
@@ -228,12 +234,12 @@
             if restartTimes == restartTimes2 then do
                 nextWait <- waitFiles waiter
                 fire nextWait =<< sessionReload session
-            else do
+            else
                 runGhcid session waiter termSize termOutput opts
 
     nextWait <- waitFiles waiter
     (messages, loaded) <- sessionStart session command
-    when (null loaded) $ do
+    when (null loaded && not ignoreLoaded) $ do
         putStrLn $ "\nNo files loaded, GHCi is not working properly.\nCommand: " ++ command
         exitFailure
     fire nextWait (messages, loaded)
diff --git a/src/Language/Haskell/Ghcid.hs b/src/Language/Haskell/Ghcid.hs
--- a/src/Language/Haskell/Ghcid.hs
+++ b/src/Language/Haskell/Ghcid.hs
@@ -124,7 +124,7 @@
             when (isNothing res) $
                 fail "Ghcid.exec, computation is already running, must be used single-threaded"
 
-    let ghciInterrupt = withLock isInterrupting $ do
+    let ghciInterrupt = withLock isInterrupting $
             whenM (fmap isNothing $ withLockTry isRunning $ return ()) $ do
                 whenLoud $ outStrLn "%INTERRUPT"
                 interruptProcessGroupOf ghciProcess
diff --git a/src/Language/Haskell/Ghcid/Parser.hs b/src/Language/Haskell/Ghcid/Parser.hs
--- a/src/Language/Haskell/Ghcid/Parser.hs
+++ b/src/Language/Haskell/Ghcid/Parser.hs
@@ -39,8 +39,8 @@
              -- take position, including span if present
             , (pos,rest) <- span (\c -> c == ':' || c == '-' || isSpan c || isDigit c) rest
             -- separate line and column, ignoring span (we want the start point only)
-            , [p1,p2] <- map read $ wordsBy (\c -> c == ':' || isSpan c) $ takeWhile (\c->c /= '-') pos 
-            , (msg,las) <- span (isPrefixOf " ") xs
+            , [p1,p2] <- map read $ wordsBy (\c -> c == ':' || isSpan c) $ takeWhile (/= '-') pos
+            , (msg,las) <- span isMessageBody xs
             , rest <- trimStart $ unwords $ rest : xs
             , sev <- if "warning:" `isPrefixOf` lower rest then Warning else Error
             = Message sev file (p1,p2) (x:msg) : f las
@@ -57,6 +57,12 @@
         f (_:xs) = f xs
         f [] = []
         isSpan c = c== ',' || c == '(' || c == ')'
+
+-- After the file location, message bodies are indented (perhaps prefixed by a line number)
+isMessageBody :: String -> Bool
+isMessageBody xs = isPrefixOf " " xs || case break (=='|') xs of
+  (prefix, _:_) | all (\x -> isSpace x || isDigit x) prefix -> True
+  _ -> False
 
 -- A filename, followed by a colon - be careful to handle Windows drive letters, see #61
 breakFileColon :: String -> Maybe (FilePath, String)
diff --git a/src/Language/Haskell/Ghcid/Util.hs b/src/Language/Haskell/Ghcid/Util.hs
--- a/src/Language/Haskell/Ghcid/Util.hs
+++ b/src/Language/Haskell/Ghcid/Util.hs
@@ -3,7 +3,7 @@
 module Language.Haskell.Ghcid.Util(
     dropPrefixRepeatedly,
     chunksOfWord,
-    outWith, outStrLn, outStr,
+    outWith, outStrLn,
     allGoodMessage,
     getModTime, getModTimeResolution
     ) where
@@ -37,11 +37,8 @@
 outWith :: IO a -> IO a
 outWith = withLock lock
 
-outStr :: String -> IO ()
-outStr = outWith . putStr
-
 outStrLn :: String -> IO ()
-outStrLn s = outStr $ s ++ "\n"
+outStrLn = outWith . putStrLn
 
 
 -- | The message to show when no errors have been reported
diff --git a/src/Session.hs b/src/Session.hs
--- a/src/Session.hs
+++ b/src/Session.hs
@@ -4,7 +4,7 @@
 --   Not suitable for calling multithreaded.
 module Session(
     Session, withSession,
-    sessionStart, sessionRestart, sessionReload,
+    sessionStart, sessionReload,
     sessionExecAsync,
     ) where
 
diff --git a/src/Test/Ghcid.hs b/src/Test/Ghcid.hs
--- a/src/Test/Ghcid.hs
+++ b/src/Test/Ghcid.hs
@@ -40,7 +40,7 @@
 copyDir :: FilePath -> IO a -> IO ()
 copyDir dir act = do
     b <- doesDirectoryExist dir
-    if not b then putStrLn $ "Couldn't run test because test source is missing, " ++ dir else void $ do
+    if not b then putStrLn $ "Couldn't run test because test source is missing, " ++ dir else void $
         withTempDir $ \tdir -> do
             xs <- withCurrentDirectory dir $ listFilesRecursive "."
             forM_ xs $ \x -> do
diff --git a/src/Test/Parser.hs b/src/Test/Parser.hs
--- a/src/Test/Parser.hs
+++ b/src/Test/Parser.hs
@@ -12,6 +12,7 @@
 parserTests = testGroup "Parser tests"
     [testParseShowModules
     ,testParseLoad
+    ,testParseLoadGhc82
     ,testParseLoadSpans
     ]
 
@@ -51,6 +52,18 @@
     ,Message {loadSeverity = Warning, loadFile = "C:\\GHCi.hs", loadFilePos = (82,1), loadMessage = ["C:\\GHCi.hs:82:1: warning: Defined but not used: \8216foo\8217"]}
     ,Message {loadSeverity = Warning, loadFile = "src\\Haskell.hs", loadFilePos = (4,23), loadMessage = ["src\\Haskell.hs:4:23:","    Warning: {-# SOURCE #-} unnecessary in import of  `Boot'"]}
     ,Message {loadSeverity = Error, loadFile = "src\\Boot.hs-boot", loadFilePos = (2,8), loadMessage = ["src\\Boot.hs-boot:2:8:","    File name does not match module name:","    Saw: `BootX'","    Expected: `Boot'"]}
+    ]
+
+testParseLoadGhc82 :: TestTree
+testParseLoadGhc82 = testCase "GHC 8.2 Load Parsing" $ parseLoad
+    ["[18 of 24] Compiling Physics ( Physics.hs, interpreted )"
+    ,"Physics.hs:30:18: error: parse error on input ‘^*’"
+    ,"   |"
+    ,"30 |           dx = ' ^* delta"
+    ,"   |                  ^^"
+    ] @?=
+    [Loading "Physics" "Physics.hs"
+    ,Message {loadSeverity = Error, loadFile = "Physics.hs", loadFilePos = (30,18), loadMessage = ["Physics.hs:30:18: error: parse error on input ‘^*’" ,"   |" ,"30 |           dx = ' ^* delta" ,"   |                  ^^"]}
     ]
 
 -- | Test when error messages include spans (-ferror-spans)
