diff --git a/boots-app.cabal b/boots-app.cabal
--- a/boots-app.cabal
+++ b/boots-app.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.12
 name: boots-app
-version: 0.1.0.3
+version: 0.1.0.5
 license: MIT
 license-file: LICENSE
 copyright: 2019 Daniel YU
@@ -30,6 +30,7 @@
     default-extensions: FlexibleInstances MultiParamTypeClasses
                         GeneralizedNewtypeDeriving OverloadedStrings RecordWildCards
                         FlexibleContexts RankNTypes ScopedTypeVariables
+                        FunctionalDependencies ConstraintKinds
     ghc-options: -Wall -fno-warn-orphans -fno-warn-missing-signatures
     build-depends:
         base >=4.10 && <5,
@@ -41,8 +42,8 @@
         microlens >=0.4.10 && <0.5,
         monad-logger >=0.3.30 && <0.4,
         mtl >=2.2.2 && <2.3,
-        salak >=0.3.3.1 && <0.4,
-        salak-yaml >=0.3.3 && <0.4,
+        salak >=0.3.3.2 && <0.4,
+        salak-yaml >=0.3.3.2 && <0.4,
         splitmix >=0.0.3 && <0.1,
         text >=1.2.3.1 && <1.3,
         unliftio-core >=0.1.2.0 && <0.2,
@@ -65,6 +66,7 @@
     default-extensions: FlexibleInstances MultiParamTypeClasses
                         GeneralizedNewtypeDeriving OverloadedStrings RecordWildCards
                         FlexibleContexts RankNTypes ScopedTypeVariables
+                        FunctionalDependencies ConstraintKinds
     ghc-options: -Wall -fno-warn-orphans -fno-warn-missing-signatures
     build-depends:
         base >=4.10 && <5,
@@ -77,8 +79,8 @@
         microlens >=0.4.10 && <0.5,
         monad-logger >=0.3.30 && <0.4,
         mtl >=2.2.2 && <2.3,
-        salak >=0.3.3.1 && <0.4,
-        salak-yaml >=0.3.3 && <0.4,
+        salak >=0.3.3.2 && <0.4,
+        salak-yaml >=0.3.3.2 && <0.4,
         splitmix >=0.0.3 && <0.1,
         text >=1.2.3.1 && <1.3,
         unliftio-core >=0.1.2.0 && <0.2,
diff --git a/src/Boots.hs b/src/Boots.hs
--- a/src/Boots.hs
+++ b/src/Boots.hs
diff --git a/src/Boots/Factory/Application.hs b/src/Boots/Factory/Application.hs
--- a/src/Boots/Factory/Application.hs
+++ b/src/Boots/Factory/Application.hs
@@ -4,15 +4,16 @@
   , buildApp
   , rand64
   , buildRandom
+  , getRand
   ) where
 
+import           Boots.App.Internal
 import           Boots.Factory
 import           Boots.Factory.Logger
 import           Boots.Factory.Salak
 import           Boots.Factory.Vault
 import           Control.Concurrent.MVar
 import           Data.Maybe
-import           Data.Proxy
 import           Data.String
 import           Data.Text               (Text)
 import           Data.Version            (Version)
@@ -23,14 +24,14 @@
 import           Salak
 import           System.Random.SplitMix
 
-class HasApp cxt env where
+class HasApp cxt env | env -> cxt where
   askApp :: Lens' env (AppEnv cxt)
 
 instance HasApp cxt (AppEnv cxt) where
   askApp = id
 
 instance HasSalak (AppEnv cxt) where
-  askSourcePack = lens configure (\x y -> x {configure = y})
+  askSalak = lens configure (\x y -> x {configure = y})
 
 instance HasLogger (AppEnv cxt) where
   askLogger = lens logF (\x y -> x {logF = y})
@@ -53,9 +54,9 @@
   configure  <- buildSalak confName
   within configure $ do
     name       <- fromMaybe (fromString confName) <$> require "application.name"
-    randSeed   <- offer $ liftIO $ initSMGen >>= newMVar
-    instanceId <- offer $ liftIO $ hex64 <$> random64 randSeed
-    vaultF     <- liftIO $ newVaultRef
+    randSeed   <- liftIO $ initSMGen >>= newMVar
+    instanceId <- liftIO $ hex32 <$> random64 randSeed
+    vaultF     <- liftIO newVaultRef
     logF       <- buildLogger vaultF (name <> "," <> instanceId)
     return AppEnv{..}
 
@@ -67,10 +68,18 @@
 hex64 :: IsString a => Word64 -> a
 hex64 i = fromString $ let x = showHex i "" in replicate (16 - length x) '0' ++ x
 
+hex32 :: IsString a => Word64 -> a
+hex32 i = fromString $ let x = showHex i "" in drop 8 $ replicate (16 - length x) '0' ++ x
+
 rand64 :: (IsString a, MonadIO m) => MVar SMGen -> m a
 rand64 = liftIO . fmap hex64 . random64
 
-buildRandom :: forall cxt env a m. (IsString a, MonadIO m, HasApp cxt env) => Proxy cxt -> Factory m env a
-buildRandom _ = do
-  (AppEnv{..} :: AppEnv cxt) <- asks (view askApp)
+getRand :: (IsString a, HasApp cxt env, MonadIO m) => AppT env m a
+getRand = do
+  AppEnv{..} <- asks (view askApp)
+  lift $ rand64 randSeed
+
+buildRandom :: (IsString a, MonadIO m, HasApp cxt env) => Factory m env a
+buildRandom = do
+  AppEnv{..} <- asks (view askApp)
   offer $ rand64 randSeed
diff --git a/src/Boots/Factory/Logger.hs b/src/Boots/Factory/Logger.hs
--- a/src/Boots/Factory/Logger.hs
+++ b/src/Boots/Factory/Logger.hs
@@ -57,7 +57,7 @@
 instance (MonadIO m, HasLogger env) => MonadLoggerIO (AppT env m) where
   askLoggerIO = logfunc <$> asks (view askLogger)
 
-instance Monad m => FromProp m LogLevel where
+instance FromProp m LogLevel where
   fromProp = readEnum (fromEnumProp.toLower)
     where
       fromEnumProp "debug" = Right   LevelDebug
diff --git a/src/Boots/Factory/Salak.hs b/src/Boots/Factory/Salak.hs
--- a/src/Boots/Factory/Salak.hs
+++ b/src/Boots/Factory/Salak.hs
@@ -13,16 +13,16 @@
 import           Salak.Yaml
 
 class HasSalak env where
-  askSourcePack :: Lens' env SourcePack
+  askSalak :: Lens' env Salak
 
-instance HasSalak SourcePack where
-  askSourcePack = id
+instance HasSalak Salak where
+  askSalak = id
 
 instance (HasSalak env, Monad m) => MonadSalak (Factory m env) where
-  askSalak = asks (view askSourcePack)
+  askSourcePack = asks (view askSalak)
 
 instance (HasSalak env, Monad m) => MonadSalak (AppT env m) where
-  askSalak = asks (view askSourcePack)
+  askSourcePack = asks (view askSalak)
 
 buildSalak :: (MonadIO m, MonadCatch m) => String -> Factory m () Salak
-buildSalak name = offer $ runSalakWithYaml name askSalak
+buildSalak name = offer $ runSalakWithYaml name askSourcePack
diff --git a/src/Boots/Factory/Vault.hs b/src/Boots/Factory/Vault.hs
--- a/src/Boots/Factory/Vault.hs
+++ b/src/Boots/Factory/Vault.hs
@@ -12,7 +12,7 @@
 newVaultRef :: IO (VaultRef env)
 newVaultRef = newMVar $ const id
 
-class HasVault cxt env where
+class HasVault cxt env | env -> cxt where
   askVault :: Lens' env (VaultRef cxt)
 
 instance HasVault cxt (VaultRef cxt) where
