diff --git a/antisplice.cabal b/antisplice.cabal
--- a/antisplice.cabal
+++ b/antisplice.cabal
@@ -10,7 +10,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.14.0.0
+version:             0.14.0.3
 
 -- A short (one-line) description of the package.
 synopsis:            An engine for text-based dungeons.
diff --git a/src/Game/Antisplice/Rooms.hs b/src/Game/Antisplice/Rooms.hs
--- a/src/Game/Antisplice/Rooms.hs
+++ b/src/Game/Antisplice/Rooms.hs
@@ -587,7 +587,14 @@
 withObject :: MonadDungeon m => ObjectId -> ObjectT (RoomT m) a -> m a
 withObject i m = do
   rs <- roomOfObject i
+  ps <- getPlayerState
   case rs of
+      [] -> case avlLookup i $ playerInventoryOf ps of
+              Nothing -> error "Wtf, that object does not exist. Neither in a room nor in your inventory."
+              Just o -> withRoom (playerRoomOf ps) $ do
+                (a,o') <- runObjectT m o
+                lift $ modifyPlayerState $ \p -> p{playerInventoryOf=avlInsert o' $ playerInventoryOf p}
+                return a
       [r] -> withRoom r $ do
         rs <- getRoomState
         case anyBstLookup i $ roomObjectsOf rs of
@@ -631,6 +638,9 @@
 
 expandDun :: (MonadPrinter m,MonadDungeon m) => String -> m ()
 expandDun [] = return ()
+expandDun ('\\':'#':ss) = do
+  mprint "#"
+  expandDun ss
 expandDun ('#':'?':'{':ss) =
   let nm = takeBrace 0 ss
       rm = drop (length nm + 1) ss
@@ -647,22 +657,32 @@
         expandDun rm
 expandDun ('#':'{':ss) =
   let (nm,rm) = (takeWhile (/='}') &&& tail.dropWhile (/='}')) ss
-      replace "health" = liftM (show . joinMaybe . avlLookup Health . playerCurrenciesOf) getPlayerState >>= mprint
-      replace "ohealth" = do
+      prnum Nothing Nothing i = show i
+      prnum (Just d) Nothing i = show (i `div` d)
+      prnum Nothing (Just m) i = let exp s l = replicate (l-length s) '0' ++ s in exp (show (i `mod` m)) (length $ show (m-1))
+      prnum (Just d) (Just m) i = prnum (Just d) Nothing i ++ "." ++ prnum (Just m) Nothing i
+      replace :: (MonadPrinter m,MonadDungeon m) => String -> Maybe Int -> Maybe Int -> m ()
+      replace "health" d m = liftM (prnum d m . joinMaybe . avlLookup Health . playerCurrenciesOf) getPlayerState >>= mprint
+      replace "ohealth" d m = do
         i <- liftM playerOpponentOf getPlayerState
         o <- withObject i getObjectState
-        mprint $ show $ objectCurHealthOf o
-      replace "otitle" = do
+        mprint $ prnum d m $ objectCurHealthOf o
+      replace "otitle" _ _ = do
         i <- liftM playerOpponentOf getPlayerState
         o <- withObject i getObjectState
         mprint $ unpack $ objectTitleOf o
-      replace s = do
+      replace s d m = do
         cs <- liftM (avlInorder . currenciesOf) getDungeonState
         case filter ((==s).currencyNameOf) cs of
           [] -> return ()
-          [c] -> liftM (show .  joinMaybe . avlLookup (currencyIdOf c) . playerCurrenciesOf) getPlayerState >>= mprint
+          [c] -> liftM (prnum d m .  joinMaybe . avlLookup (currencyIdOf c) . playerCurrenciesOf) getPlayerState >>= mprint
+          cs -> mprintLn $ concat $ map currencyNameOf cs
+      (nm1,dm1,mm1)
+        | '/' `elem` nm = (takeWhile (/='/') nm, Just $ read $ tail $ dropWhile (/='/') nm, Nothing)
+        | '%' `elem` nm = (takeWhile (/='%') nm, Nothing, Just $ read $ tail $ dropWhile (/='%') nm)
+        | otherwise = (nm,Nothing,Nothing)
   in do
-    replace nm
+    replace nm1 dm1 mm1
     expandDun rm
 expandDun ('#':ss) =
   let (nm,rm) = (takeWhile isAnum &&& dropWhile isAnum) ss
diff --git a/src/Game/Antisplice/SingleUser.hs b/src/Game/Antisplice/SingleUser.hs
--- a/src/Game/Antisplice/SingleUser.hs
+++ b/src/Game/Antisplice/SingleUser.hs
@@ -65,6 +65,7 @@
       reenterCurrentRoom
       roomTriggerOnAnnounceOf =<< getRoomState
       roomTriggerOnLookOf =<< getRoomState
+      mputv "prompt" . Literal =<< expand "$prompt> "
       repl
     case r :: Either SplErr ((),DungeonState) of
       Left QuitError -> mprintLn "Bye bye!"
