diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,10 @@
 # Changelog for passman
 
+## 0.3.1
+
+- set maximum version of transformers package
+- allow user to specifiy a temporary master password to retrieve a password
+
 ## 0.3.0.2
 
 - more dependency versions
diff --git a/app/UI.hs b/app/UI.hs
--- a/app/UI.hs
+++ b/app/UI.hs
@@ -27,7 +27,7 @@
 import Control.Monad (when)
 import Control.Monad.Trans.Class (lift)
 import qualified Control.Monad.Trans.State as S
-import Lens.Micro (over, set, (^.))
+import Lens.Micro (over, set, (^.), (.~))
 import Lens.Micro.Extras (view)
 import System.Console.HCL
   ( Request
@@ -161,11 +161,12 @@
 
 servMenu :: String -> S.StateT Status IO ()
 servMenu x = menu x
-  [ ( "show password",  showPass x >> servMenu x )
-  , ( "edit password",  editPassMenu x           )
-  , ( "remove service", removeServ x             )
-  , ( "rename service", renameServ x             )
-  , ( "back",           mainMenu                 )
+  [ ( "show password",           showPass x >> servMenu x )
+  , ( "show alternate password", showAltPass x            )
+  , ( "edit password",           editPassMenu x           )
+  , ( "remove service",          removeServ x             )
+  , ( "rename service",          renameServ x             )
+  , ( "back",                    mainMenu                 )
   ]
 
 editPassMenu :: String -> S.StateT Status IO ()
@@ -225,15 +226,24 @@
   editPassMenu x
 
 showPass :: String -> S.StateT Status IO ()
-showPass x = do
+showPass x = withService x
+  (lift $ putStrLn "The service could not be found in the database.") $
+  \d -> do
+    lift $ putStrLn ""
+    mp <- S.gets $ view masterPass
+    lift $ putStrLn $ case pwGenerate mp d of
+      Nothing -> "The password data were not valid."
+      Just pw -> "password for " ++ x ++ ": " ++ pw
+
+showAltPass :: String -> S.StateT Status IO ()
+showAltPass srv = do
   lift $ putStrLn ""
-  withService x
-    (lift $ putStrLn "The service could not be found in the database.") $
-    \d -> do
-      mp <- S.gets $ view masterPass
-      lift $ putStrLn $ case pwGenerate mp d of
-        Nothing -> "The password data were not valid."
-        Just pw -> "password for " ++ x ++ ": " ++ pw
+  old <- S.gets $ view masterPass
+  Just new <- lift $ runRequest $ required $ prompt "alternate master password: " reqPassword
+  S.modify $ masterPass .~ new
+  showPass srv
+  S.modify $ masterPass .~ old
+  servMenu srv
 
 -- TODO: refactor this monstrosity
 editPolicy :: PWPolicy -> Request PWPolicy
diff --git a/passman.cabal b/passman.cabal
--- a/passman.cabal
+++ b/passman.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 2f7f0e04b3c25e738c5538d07d22d64c28c2a586ed82d577999d070ceafc41ba
+-- hash: e3bd0ca2b360b025666f4503e3115caaaed34c7719487d90ae4d5eb58f9621e9
 
 name:           passman
-version:        0.3.0.2
+version:        0.3.1
 synopsis:       a simple password manager
 description:    Please see the README on GitHub at <https://github.com/jlamothe/passman#readme>
 category:       Security
@@ -70,7 +70,7 @@
     , microlens-th >=0.4.3.6 && <0.5
     , passman
     , random >=1.1 && <1.2
-    , transformers >=0.5.6.2
+    , transformers >=0.5.6.2 && <0.6
   default-language: Haskell2010
 
 test-suite passman-test
