diff --git a/halive.cabal b/halive.cabal
--- a/halive.cabal
+++ b/halive.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                halive
-version:             0.1.2
+version:             0.1.3
 synopsis:            A live recompiler
 description:
   Live recompiler for Haskell
@@ -71,6 +71,10 @@
   -- Shouldn't ghc-prof-options override it anyway? Who knows.
   if !os(windows)
     ghc-options:         -dynamic
+    -- This overrides -dynamic when building for profiling,
+    -- probably breaking the executable but at least it lets us build
+    -- halive as a dependency.
+    ghc-prof-options:    -static
   -- ^ Required on Mac due to https://ghc.haskell.org/trac/ghc/ticket/9278
   -- (does GHCi use this??)
   other-modules:
diff --git a/src/Halive/FindPackageDBs.hs b/src/Halive/FindPackageDBs.hs
--- a/src/Halive/FindPackageDBs.hs
+++ b/src/Halive/FindPackageDBs.hs
@@ -1,17 +1,17 @@
-
 {-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE ScopedTypeVariables #-}
 module Halive.FindPackageDBs where
 import Data.Maybe
 
+import Control.Monad.IO.Class
+import Data.Char
+import Data.List
 import System.Directory
 import System.FilePath
 import System.Process
-import Data.List
-import Data.Char
-import Control.Monad.IO.Class
-
-import GHC
+import Control.Exception
 import DynFlags
+import GHC
 
 -- | Extract the sandbox package db directory from the cabal.sandbox.config file.
 --   Exception is thrown if the sandbox config file is broken.
@@ -29,10 +29,10 @@
     return $ if exists then (Just f) else (Nothing)
 
 addExtraPkgConfs :: DynFlags -> [FilePath] -> DynFlags
-addExtraPkgConfs dflags pkgConfs = dflags 
-    { extraPkgConfs = 
+addExtraPkgConfs dflags pkgConfs = dflags
+    { extraPkgConfs =
         let newPkgConfs = map PkgConfFile pkgConfs
-        in (newPkgConfs ++) . extraPkgConfs dflags 
+        in (newPkgConfs ++) . extraPkgConfs dflags
     }
 
 
@@ -48,7 +48,7 @@
     return $ (extractKey "package-db:" =<< config)
 
 updateDynFlagsWithCabalSandbox :: MonadIO m => DynFlags -> m DynFlags
-updateDynFlagsWithCabalSandbox dflags = 
+updateDynFlagsWithCabalSandbox dflags =
     liftIO getSandboxDb >>= \case
         Nothing -> return dflags
         Just sandboxDB -> do
@@ -70,9 +70,17 @@
             return . Just . catMaybes $ map (flip extractKey pathInfo) ["local-pkg-db:", "snapshot-pkg-db:"]
 
 updateDynFlagsWithStackDB :: MonadIO m => DynFlags -> m DynFlags
-updateDynFlagsWithStackDB dflags = 
+updateDynFlagsWithStackDB dflags =
     liftIO getStackDb >>= \case
         Nothing -> return dflags
         Just stackDBs -> do
             let pkgs = map PkgConfFile stackDBs
             return dflags { extraPkgConfs = (pkgs ++) . extraPkgConfs dflags }
+
+updateDynFlagsWithGlobalDB :: MonadIO m => DynFlags -> m DynFlags
+updateDynFlagsWithGlobalDB dflags = do
+    xs <- liftIO $ lines <$> readProcess "ghc" ["--print-global-package-db"] ""
+        `catch` (\(e :: SomeException) -> return [])
+    case xs of
+        [pkgconf] -> return dflags { extraPkgConfs = (PkgConfFile pkgconf :) . extraPkgConfs dflags }
+        _ -> return dflags
diff --git a/src/Halive/Recompiler.hs b/src/Halive/Recompiler.hs
--- a/src/Halive/Recompiler.hs
+++ b/src/Halive/Recompiler.hs
@@ -40,7 +40,9 @@
     ghcChan <- newTChanIO
 
     -- Grab this thread's ID (need to run this on the main thread, of course)
-    mainThreadID <- myThreadId
+    mainThreadID <- case gscMainThreadID ghcSessionConfig of
+        Just threadID -> return threadID
+        Nothing -> myThreadId
 
     initialFileLock <- liftIO newEmptyMVar
 
@@ -112,7 +114,7 @@
         writeTChanIO ghcChan compilationRequest
 
     -- Recompile on file event notifications
-    fileEventListener <- case rccWatchAll of 
+    fileEventListener <- case rccWatchAll of
         Nothing -> eventListenerForFile rccFilePath JustReportEvents
         Just (watchDir, fileTypes) -> eventListenerForDirectory watchDir fileTypes
     listenerThread <- forkIO . forever $ do
diff --git a/src/Halive/SubHalive.hs b/src/Halive/SubHalive.hs
--- a/src/Halive/SubHalive.hs
+++ b/src/Halive/SubHalive.hs
@@ -58,6 +58,7 @@
         -- to work around a bug where the GHC API crashes while loading libraries
         -- if the main thread is doing work (possibly due to accessing said libraries in some way)
     , gscVerbosity          :: Int
+    , gscMainThreadID       :: Maybe ThreadId
     }
 
 
@@ -72,6 +73,7 @@
     , gscCompilationMode = Interpreted
     , gscStartupFile = Nothing
     , gscVerbosity = 0
+    , gscMainThreadID = Nothing
     }
 
 --pkgConfRefToString = \case
@@ -88,9 +90,11 @@
 withGHCSession :: ThreadId -> GHCSessionConfig -> Ghc a -> IO a
 withGHCSession mainThreadID GHCSessionConfig{..} action = do
     -- Work around https://ghc.haskell.org/trac/ghc/ticket/4162
-    let restoreControlC f = do
+    let
+        restoreControlC f = do
             liftIO $ installHandler sigINT (\_signal -> killThread mainThreadID)
             f
+
     -- defaultErrorHandler defaultFatalMessager defaultFlushOut $ runGhc (Just libdir) $ do
     runGhc (Just gscLibDir) . restoreControlC $ do
         -- Get the default dynFlags
@@ -101,9 +105,10 @@
         dflags2 <- updateDynFlagsWithCabalSandbox dflags1
         -- If this is a stack project, add its package DBs
         dflags3 <- updateDynFlagsWithStackDB dflags2
+        dflags4 <- updateDynFlagsWithGlobalDB dflags3
 
         -- Make sure we're configured for live-reload
-        let dflags4 = dflags3 { hscTarget   = if gscCompilationMode == Compiled then HscAsm else HscInterpreted
+        let dflags5 = dflags4 { hscTarget   = if gscCompilationMode == Compiled then HscAsm else HscInterpreted
                               , optLevel    = if gscCompilationMode == Compiled then 2 else 0
                               , ghcLink     = LinkInMemory
                               , ghcMode     = CompManager
@@ -121,13 +126,13 @@
             -- about a half second (i.e., it won't recompile)
             -- This fixes that, but probably isn't quite what we want
             -- since it will cause extra files to be recompiled...
-            dflags5 = if gscFixDebounce == DebounceFix
-                        then dflags4 `gopt_set` Opt_ForceRecomp
-                        else dflags4
-            dflags6 = foldl xopt_set dflags5 gscLanguageExtensions
+            dflags6 = if gscFixDebounce == DebounceFix
+                        then dflags5 `gopt_set` Opt_ForceRecomp
+                        else dflags5
+            dflags7 = foldl xopt_set dflags6 gscLanguageExtensions
 
         -- We must call setSessionDynFlags before calling initPackages or any other GHC API
-        packageIDs <- setSessionDynFlags dflags6
+        packageIDs <- setSessionDynFlags dflags7
 
 
         -- Works around a yet-unidentified segfault when loading
