diff --git a/src/Yam/Middleware/Trace.hs b/src/Yam/Middleware/Trace.hs
--- a/src/Yam/Middleware/Trace.hs
+++ b/src/Yam/Middleware/Trace.hs
@@ -110,7 +110,7 @@
           v'  = L.insert spanKey s v
           rh' = resH . mapResponseHeaders (\hs -> (hTraceId, traceId):(hSpanId, spanId):hs)
           c e = do
-            runApp env (logError $ showText e)
+            runApp env { reqAttributes = Just v} (logError $ showText e)
             rh' $ whenException e
       liftIO (app req {vault = v'} rh' `catch` c)
 
diff --git a/src/Yam/Types/Prelude.hs b/src/Yam/Types/Prelude.hs
--- a/src/Yam/Types/Prelude.hs
+++ b/src/Yam/Types/Prelude.hs
@@ -5,9 +5,9 @@
     randomString
   , showText
   , throwS
+  , randomCode
   , whenException
-#if MIN_VERSION_salak(0,2,1)
-#else
+#if !MIN_VERSION_salak(0,1,7)
   , (.>>)
   , (.?>)
   , (.?=)
@@ -63,16 +63,11 @@
     , Property (..)
     , Return
     , defaultPropertiesWithFile
-#if MIN_VERSION_salak(0,2,1)
-    , (.>>)
-    , (.?=)
-    , (.?>)
-    , (.|=)
-#endif
     )
 import           Data.Text                          (Text, pack)
 import           Data.Text.Encoding                 (decodeUtf8, encodeUtf8)
 import           Data.Vault.Lazy                    (Key, Vault, newKey)
+import qualified Data.Vector                        as V
 import           Data.Version
 import           Data.Word
 import           GHC.Stack
@@ -83,7 +78,8 @@
 import           System.IO.Unsafe                   (unsafePerformIO)
 import           System.Random.MWC
 
-#if MIN_VERSION_salak(0,2,1)
+#if MIN_VERSION_salak(0,1,7)
+import           Data.Salak                         ((.>>), (.?=), (.?>), (.|=))
 #else
 import qualified Data.Salak                         as S
 import           Data.Text                          (unpack)
@@ -135,3 +131,10 @@
 
 whenException :: SomeException -> Response
 whenException e = responseServantErr $ fromMaybe err400 (fromException e :: Maybe ServantErr)
+
+-- | Utility
+randomCode :: V.Vector Char -> Int -> IO String
+randomCode seed v = do
+  let l = V.length seed
+  vs <- sequence $  replicate v $ uniformR (0,l-1) randomGen
+  return $ (seed V.!) <$> vs
diff --git a/yam.cabal b/yam.cabal
--- a/yam.cabal
+++ b/yam.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.12
 name: yam
-version: 0.5.7
+version: 0.5.8
 license: BSD3
 license-file: LICENSE
 copyright: (c) 2018 Daniel YU
@@ -64,7 +64,7 @@
         mtl >=2.2.2 && <2.3,
         mwc-random >=0.14.0.0 && <0.15,
         reflection >=2.1.4 && <2.2,
-        salak >=0.1.4 && <0.3,
+        salak >=0.1.6 && <0.3,
         scientific >=0.3.6.2 && <0.4,
         servant-client ==0.15.*,
         servant-server ==0.15.*,
@@ -75,8 +75,8 @@
         unliftio-core >=0.1.2.0 && <0.2,
         unordered-containers >=0.2.9.0 && <0.3,
         vault >=0.3.1.2 && <0.4,
+        vector >=0.12.0.2 && <0.13,
         wai >=3.2.1.2 && <3.3,
-        wai-extra >=3.0.24.3 && <3.1,
         warp >=3.2.25 && <3.3
 
 test-suite spec
@@ -133,7 +133,7 @@
         mtl >=2.2.2 && <2.3,
         mwc-random >=0.14.0.0 && <0.15,
         reflection >=2.1.4 && <2.2,
-        salak >=0.1.4 && <0.3,
+        salak >=0.1.6 && <0.3,
         scientific >=0.3.6.2 && <0.4,
         servant-client ==0.15.*,
         servant-server ==0.15.*,
@@ -144,6 +144,6 @@
         unliftio-core >=0.1.2.0 && <0.2,
         unordered-containers >=0.2.9.0 && <0.3,
         vault >=0.3.1.2 && <0.4,
+        vector >=0.12.0.2 && <0.13,
         wai >=3.2.1.2 && <3.3,
-        wai-extra >=3.0.24.3 && <3.1,
         warp >=3.2.25 && <3.3
