diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,14 @@
 # Changelog for hs-opentelemetry-instrumentation-wai
 
+## Unreleased changes
+
+## 0.1.0.0
+
+### Breaking changes
+
+- Change a type of `newOpenTelemetryWaiMiddleware'` from `TracerProvider -> IO Middleware` to `TracerProvider -> Middleware` #86
+- Use `HashMap Text Attribute` instead of `[(Text, Attribute)]` as attributes
+
 ## 0.0.1.1
 
 - Bump version bounds for hs-opentelemetry-api to == 0.0.2.0
@@ -7,5 +16,3 @@
 ## 0.0.1.0
 
 - Initial release
-
-## Unreleased changes
diff --git a/hs-opentelemetry-instrumentation-wai.cabal b/hs-opentelemetry-instrumentation-wai.cabal
--- a/hs-opentelemetry-instrumentation-wai.cabal
+++ b/hs-opentelemetry-instrumentation-wai.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:               hs-opentelemetry-instrumentation-wai
-version:            0.0.1.4
+version:            0.1.0.0
 synopsis:           WAI instrumentation middleware for OpenTelemetry
 description:        Please see the README on GitHub at <https://github.com/iand675/hs-opentelemetry/tree/main/instrumentation/wai#readme>
 category:           OpenTelemetry, Web
@@ -36,7 +36,7 @@
   build-depends:
       base >=4.7 && <5
     , bytestring
-    , hs-opentelemetry-api ==0.0.3.*
+    , hs-opentelemetry-api ==0.1.*
     , http-types
     , iproute
     , network
@@ -56,7 +56,7 @@
   build-depends:
       base >=4.7 && <5
     , bytestring
-    , hs-opentelemetry-api ==0.0.3.*
+    , hs-opentelemetry-api ==0.1.*
     , hs-opentelemetry-instrumentation-wai
     , http-types
     , iproute
diff --git a/src/OpenTelemetry/Instrumentation/Wai.hs b/src/OpenTelemetry/Instrumentation/Wai.hs
--- a/src/OpenTelemetry/Instrumentation/Wai.hs
+++ b/src/OpenTelemetry/Instrumentation/Wai.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedLists #-}
 {-# LANGUAGE OverloadedStrings #-}
 
 module OpenTelemetry.Instrumentation.Wai (
@@ -13,6 +14,7 @@
 import qualified Data.Text as T
 import qualified Data.Text.Encoding as T
 import qualified Data.Vault.Lazy as Vault
+import GHC.Stack (HasCallStack, callStack, popCallStack)
 import Network.HTTP.Types
 import Network.Socket
 import Network.Wai
@@ -24,21 +26,22 @@
 import System.IO.Unsafe
 
 
-newOpenTelemetryWaiMiddleware :: IO Middleware
-newOpenTelemetryWaiMiddleware = getGlobalTracerProvider >>= newOpenTelemetryWaiMiddleware'
-
+newOpenTelemetryWaiMiddleware :: (HasCallStack) => IO Middleware
+newOpenTelemetryWaiMiddleware = newOpenTelemetryWaiMiddleware' <$> getGlobalTracerProvider
 
 newOpenTelemetryWaiMiddleware'
-  :: TracerProvider
-  -> IO Middleware
-newOpenTelemetryWaiMiddleware' tp = do
+  :: (HasCallStack)
+  => TracerProvider
+  -> Middleware
+newOpenTelemetryWaiMiddleware' tp =
   let waiTracer =
         makeTracer
           tp
           "opentelemetry-instrumentation-wai"
           (TracerOptions Nothing)
-  pure $ middleware waiTracer
+  in middleware waiTracer
   where
+    usefulCallsite = callerAttributes
     middleware :: Tracer -> Middleware
     middleware tracer app req sendResp = do
       let propagator = getTracerProviderPropagators $ getTracerTracerProvider tracer
@@ -49,7 +52,7 @@
       let path_ = T.decodeUtf8 $ rawPathInfo req
       -- peer = remoteHost req
       parentContextM
-      inSpan' tracer path_ (defaultSpanArguments {kind = Server}) $ \requestSpan -> do
+      inSpan'' tracer path_ (defaultSpanArguments {kind = Server, attributes = usefulCallsite}) $ \requestSpan -> do
         ctxt <- getContext
         addAttributes
           requestSpan
