diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,8 @@
+0.7.0.0
+=======
+* Exclusively use HasCallstack for location reporting in errors. Credit to [Domen Kožar](https://github.com/domenkozar)
+* Drop support for GHC 7.x
+
 0.6.3.0
 =======
 * Add `ToJSON`/`FromJSON` instances for Verbosity. Credit to [Aleksey Khudyakov](https://github.com/Shimuuar).
diff --git a/katip.cabal b/katip.cabal
--- a/katip.cabal
+++ b/katip.cabal
@@ -1,5 +1,5 @@
 name:                katip
-version:             0.6.3.0
+version:             0.7.0.0
 synopsis:            A structured logging framework.
 description:
   Katip is a structured logging framework. See README.md for more details.
@@ -25,7 +25,7 @@
   test/Katip/Tests/Scribes/Handle.hs
   test/Katip/Tests/Scribes/Handle-text.golden
   test/Katip/Tests/Format/Time.hs
-tested-with: GHC == 7.8.4, GHC== 7.10.3
+tested-with: GHC == 8.0.1, GHC == 8.2.2, GHC == 8.4.3
 
 source-repository head
   type:     git
diff --git a/src/Katip.hs b/src/Katip.hs
--- a/src/Katip.hs
+++ b/src/Katip.hs
@@ -166,6 +166,7 @@
     , KatipContext (..)
     , logFM
     , logTM
+    , logLocM
     , logItemM
     , logExceptionM
     , AnyLogContext
diff --git a/src/Katip/Core.hs b/src/Katip/Core.hs
--- a/src/Katip/Core.hs
+++ b/src/Katip/Core.hs
@@ -7,7 +7,6 @@
 {-# LANGUAGE FlexibleInstances          #-}
 {-# LANGUAGE GADTs                      #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE ImplicitParams             #-}
 {-# LANGUAGE MultiParamTypeClasses      #-}
 {-# LANGUAGE OverloadedStrings          #-}
 {-# LANGUAGE RankNTypes                 #-}
@@ -997,11 +996,15 @@
 -- fill the 'Maybe Loc' gap in 'logF' of this module, and relies on implicit
 -- callstacks when available (GHC > 7.8).
 #if MIN_VERSION_base(4, 8, 0)
-getLoc :: (?loc :: CallStack) => Maybe Loc
-getLoc = case getCallStack ?loc of
+getLoc :: HasCallStack => Maybe Loc
+getLoc = case getCallStack callStack of
   [] -> Nothing
-  xs -> Just . toLoc . last $ xs
+  xs -> Just . toLoc . head $ filter filterKatip xs
   where
+    filterKatip :: (String, SrcLoc) -> Bool
+    filterKatip (_, srcloc) = not $
+      "katip-" `isPrefixOf` srcLocPackage srcloc
+
     toLoc :: (String, SrcLoc) -> Loc
     toLoc (_, l) = Loc {
         loc_filename = srcLocFile l
@@ -1032,7 +1035,7 @@
 
 
 -------------------------------------------------------------------------------
--- | 'Loc'-tagged logging using implicit-callstacks when available.
+-- | 'Loc'-tagged logging using 'GHC.Stack' when available.
 --
 -- This function does not require template-haskell as it
 -- automatically uses <https://hackage.haskell.org/package/base-4.8.2.0/docs/GHC-Stack.html#v:getCallStack implicit-callstacks>
@@ -1043,7 +1046,7 @@
 --
 -- @logLoc obj mempty InfoS "Hello world"@
 #if MIN_VERSION_base(4, 8, 0)
-logLoc :: (Applicative m, LogItem a, Katip m, ?loc :: CallStack)
+logLoc :: (Applicative m, LogItem a, Katip m, HasCallStack)
 #else
 logLoc :: (Applicative m, LogItem a, Katip m)
 #endif
diff --git a/src/Katip/Monadic.hs b/src/Katip/Monadic.hs
--- a/src/Katip/Monadic.hs
+++ b/src/Katip/Monadic.hs
@@ -68,6 +68,12 @@
 import           Data.Semigroup                    as Semi
 import           Data.Sequence                     as Seq
 import           Data.Text                         (Text)
+#if MIN_VERSION_base(4, 8, 0)
+#if !MIN_VERSION_base(4, 9, 0)
+import           GHC.SrcLoc
+#endif
+import           GHC.Stack
+#endif
 import           Language.Haskell.TH
 -------------------------------------------------------------------------------
 import           Katip.Core
@@ -235,7 +241,7 @@
 -- very low level and you typically can use 'logTM' in its
 -- place. Automatically supplies payload and namespace.
 logItemM
-    :: (Applicative m, KatipContext m)
+    :: (Applicative m, KatipContext m, HasCallStack)
     => Maybe Loc
     -> Severity
     -> LogStr
@@ -272,18 +278,21 @@
 
 
 -------------------------------------------------------------------------------
--- | 'Loc'-tagged logging when using <https://hackage.haskell.org/package/base-4.8.2.0/docs/GHC-Stack.html#v:getCallStack implicit-callstacks>.
+-- | 'Loc'-tagged logging when using 'GHC.Stack.getCallStack' implicit-callstacks>.
 --   Automatically supplies payload and namespace.
 --
 -- Same consideration as `logLoc` applies.
 --
+-- Location will be logged from the module that invokes 'logLocM' so
+-- be aware that wrapping 'logLocM' will make location reporting useless.
+--
 -- This function does not require template-haskell. Using GHC <= 7.8 will result
 -- in the emission of a log line without any location information.
 -- Users using GHC <= 7.8 may want to use the template-haskell function
 -- `logTM` for maximum compatibility.
 --
 -- @logLocM InfoS "Hello world"@
-logLocM :: (Applicative m, KatipContext m)
+logLocM :: (Applicative m, KatipContext m, HasCallStack)
         => Severity
         -> LogStr
         -> m ()
diff --git a/test/Katip/Tests.hs b/test/Katip/Tests.hs
--- a/test/Katip/Tests.hs
+++ b/test/Katip/Tests.hs
@@ -126,6 +126,13 @@
         , (baseNS <> "added" <> "namespace", baseCtx, "with namespaces")
         , (baseNS <> "added", HM.insert "additional" (Bool True) baseCtx, "additional context")
         ]
+  , testCase "Katip.Monadic.logLocM" $ do
+      (le, items) <- recordingEnv
+      runKatipContextT le (sl "base_context" (42 :: Int)) "base_namespace" $ logLocM InfoS "basic log"
+      _ <- closeScribes le
+      loggedItems <- readTVarIO items
+      let loc = _itemLoc (head loggedItems)
+      fmap loc_module loc @?= Just "Katip.Tests"
   ]
   where
     recordingEnv :: IO (LogEnv, TVar [Item Object])
