diff --git a/hsenv.cabal b/hsenv.cabal
--- a/hsenv.cabal
+++ b/hsenv.cabal
@@ -1,6 +1,6 @@
 Name:                hsenv
 
-Version:             0.3
+Version:             0.4
 
 Synopsis:            Virtual Haskell Environment builder
 
diff --git a/skeletons/activate b/skeletons/activate
--- a/skeletons/activate
+++ b/skeletons/activate
@@ -19,24 +19,29 @@
 echo ""
 echo "To exit from this virtual environment, enter command 'deactivate_hsenv'."
 
-export "HSENV_PATH_BACKUP"="${PATH}"
-export "HSENV_PS1_BACKUP"="${PS1}"
+HSENV_PATH_BACKUP="$PATH"
 
+if <MODIFY_PS1>; then
+    HSENV_PS1_BACKUP="$PS1"
+fi
+
 deactivate_hsenv() {
     echo "Deactivating ${HSENV_NAME} Virtual Haskell Environment (at ${HSENV})."
     echo "Restoring previous environment settings."
 
-    export "PATH"="${HSENV_PATH_BACKUP}"
-    unset -v "HSENV_PATH_BACKUP"
-    export "PS1"="${HSENV_PS1_BACKUP}"
-    unset -v "HSENV_PS1_BACKUP"
+    export PATH="$HSENV_PATH_BACKUP"
+    unset -v HSENV_PATH_BACKUP
 
+    if <MODIFY_PS1>; then
+        PS1="$HSENV_PS1_BACKUP"
+        unset -v HSENV_PS1_BACKUP
+    fi
+
     unset -v PACKAGE_DB_FOR_CABAL
     unset -v PACKAGE_DB_FOR_GHC_PKG
     unset -v PACKAGE_DB_FOR_GHC
     unset -v HSENV
     unset -v HSENV_NAME
-    unset -v GHC_PACKAGE_PATH
     unset -f deactivate_hsenv
 
     if [ -n "$BASH" -o -n "$ZSH_VERSION" ]; then
@@ -79,7 +84,7 @@
     PKG_DB_OPT_SUFFIX="db"
 fi
 
-GHC_PACKAGE_PATH_REPLACEMENT="$(cat <HSENV_DIR>/ghc_package_path_var | sed -r -e 's/^/:/' -e 's/::*/:/g' -e 's/:\s*$//')"
+GHC_PACKAGE_PATH_REPLACEMENT="$(cat <HSENV_DIR>/ghc_package_path_var | sed -e 's/^/:/' -e 's/::*/:/g' -e 's/:\s*$//')"
 
 replace_pkg () {
   replacement=$1
@@ -92,7 +97,13 @@
 export PACKAGE_DB_FOR_GHC=" -no-user-package-${PKG_DB_OPT_SUFFIX} $(replace_pkg -package-${PKG_DB_OPT_SUFFIX}=)"
 export PACKAGE_DB_FOR_GHC_MOD=" -g -no-user-package-${PKG_DB_OPT_SUFFIX} $(replace_pkg '-g -package-'${PKG_DB_OPT_SUFFIX}=)"
 
-export PS1="(${HSENV_NAME})${PS1}"
+if <MODIFY_PS1>; then
+    if [ -n "$HSENV_NAME" ]; then
+        PS1="($HSENV_NAME)$PS1"
+    else
+        PS1="[hsenv]$PS1"
+    fi
+fi
 
 unset -v GHC_VERSION_OUTPUT
 unset -v GHC_VERSION_NUMBER
diff --git a/skeletons/cabal b/skeletons/cabal
--- a/skeletons/cabal
+++ b/skeletons/cabal
@@ -24,13 +24,19 @@
 
 CABAL_BUILDDIR_ARG=""
 
+if [ -z "<HSENV_NAME>" ]; then
+    CABAL_BUILDIR="dist"
+else
+    CABAL_BUILDIR="dist_<HSENV_NAME>"
+fi
+
 CABAL_BUILDABLE_COMMANDS="build clean configure copy haddock hscolour install register sdist test upgrade"
 
 CABAL_COMMAND="$(echo ${@} | tr -s ' ' '\n' | grep -E '[a-z]' | grep -Ev '^-'  | head -n 1)"
 
 for CABAL_BUILDABLE_COMMAND in ${CABAL_BUILDABLE_COMMANDS}; do
     if [ "${CABAL_BUILDABLE_COMMAND}" = "${CABAL_COMMAND}" ]; then
-        CABAL_BUILDDIR_ARG="--builddir=dist_<HSENV_NAME>"
+        CABAL_BUILDDIR_ARG="--builddir=${CABAL_BUILDIR}"
     fi
 done
 
diff --git a/src/Actions.hs b/src/Actions.hs
--- a/src/Actions.hs
+++ b/src/Actions.hs
@@ -19,7 +19,7 @@
 import Distribution.Package (PackageName(..))
 import Safe (lastMay)
 import Data.List (intercalate)
-import Data.Maybe
+import Data.Maybe (fromMaybe, isJust)
 
 import MyMonad
 import Types
@@ -72,7 +72,7 @@
                 , cabalWrapper
                 ]
   let cabalWrapperContents = substs [ ("<CABAL_CONFIG>", cabalConfig)
-                                    , ("<HSENV_NAME>", hsEnvName')] cabalWrapperSkel
+                                    , ("<HSENV_NAME>", fromMaybe "" hsEnvName')] cabalWrapperSkel
   indentMessages $ do
     trace "cabal wrapper contents:"
     indentMessages $ mapM_ trace $ lines cabalWrapperContents
@@ -109,18 +109,21 @@
 installActivateScript = do
   info "Installing activate script"
   hsEnvName'   <- asks hsEnvName
+  noModifyPS1  <- asks noPS1
   dirStructure <- hseDirStructure
   ghcPkgDbPath <- indentMessages ghcPkgDbPathLocation
   let activateScript = hsEnvBinDir dirStructure </> "activate"
   indentMessages $ debug $ "using location: " ++ activateScript
-  let activateScriptContents = substs [ ("<HSENV_NAME>", hsEnvName')
-                                      , ("<HSENV_DIR>", hsEnvDir dirStructure)
-                                      , ("<HSENV>", hsEnv dirStructure)
-                                      , ("<GHC_PACKAGE_PATH>", ghcPkgDbPath)
-                                      , ("<HSENV_BIN_DIR>", hsEnvBinDir dirStructure)
-                                      , ("<CABAL_BIN_DIR>", cabalBinDir dirStructure)
-                                      , ("<GHC_BIN_DIR>", ghcBinDir dirStructure)
-                                      ] activateSkel
+  let activateScriptContents =
+          substs [ ("<HSENV_NAME>", fromMaybe "" hsEnvName')
+                 , ("<HSENV_DIR>", hsEnvDir dirStructure)
+                 , ("<HSENV>", hsEnv dirStructure)
+                 , ("<GHC_PACKAGE_PATH>", ghcPkgDbPath)
+                 , ("<HSENV_BIN_DIR>", hsEnvBinDir dirStructure)
+                 , ("<CABAL_BIN_DIR>", cabalBinDir dirStructure)
+                 , ("<GHC_BIN_DIR>", ghcBinDir dirStructure)
+                 , ("<MODIFY_PS1>", if noModifyPS1 then "false" else "true")
+                 ] activateSkel
   indentMessages $ do
     trace "activate script contents:"
     indentMessages $ mapM_ trace $ lines activateScriptContents
diff --git a/src/Args.hs b/src/Args.hs
--- a/src/Args.hs
+++ b/src/Args.hs
@@ -4,8 +4,6 @@
 
 import Control.Arrow
 import Util.Args
-import System.Directory (getCurrentDirectory)
-import System.FilePath (splitPath)
 import Types
 
 #ifdef cabal
@@ -19,7 +17,7 @@
 versionString = "dev"
 #endif
 
-verbosityOpt, veryVerbosityOpt, skipSanityOpt, sharingOpt :: Switch
+verbosityOpt, veryVerbosityOpt, skipSanityOpt, sharingOpt, noPS1Opt :: Switch
 
 verbosityOpt = Switch { switchName  = "verbose"
                       , switchHelp  = "Print some debugging info"
@@ -41,6 +39,13 @@
                     , switchShort = Nothing
                     }
 
+noPS1Opt =
+    Switch { switchName = "no-ps1-indicator"
+           , switchHelp =
+               "Don't modify the shell prompt to indicate the current hsenv"
+           , switchShort = Nothing
+           }
+
 nameOpt, ghcOpt :: DynOpt
 
 nameOpt = DynOpt
@@ -75,13 +80,9 @@
                       (_, True)      -> VeryVerbose
                       (True, False)  -> Verbose
                       (False, False) -> Quiet
-  nameFlag <- getOpt nameOpt -< ()
-  name <- case nameFlag of
-           Just name' -> returnA -< name'
-           Nothing -> do
-             cwd <- liftIO' getCurrentDirectory -< ()
-             returnA -< last $ splitPath cwd
+  name <- getOpt nameOpt -< ()
   ghcFlag <- getOpt ghcOpt -< ()
+  noPS1' <- getOpt noPS1Opt -< ()
   let ghc = case ghcFlag of
               Nothing   -> System
               Just path -> Tarball path
@@ -94,8 +95,8 @@
                    , ghcSource       = ghc
                    , makeCmd         = make
                    , noSharing       = noSharingFlag
+                   , noPS1           = noPS1'
                    }
-    where liftIO' = liftIO . const
 
 getArgs :: IO Options
 getArgs = parseArgs argParser versionString outro
diff --git a/src/MyMonad.hs b/src/MyMonad.hs
--- a/src/MyMonad.hs
+++ b/src/MyMonad.hs
@@ -9,6 +9,7 @@
                , finally
                , throwError
                , catchError
+               , ask
                , asks
                , gets
                , tell
@@ -20,7 +21,7 @@
 
 import Control.Exception as Exception (IOException, catch)
 import Control.Monad.Trans (MonadIO, liftIO)
-import Control.Monad.Reader (ReaderT, MonadReader, runReaderT, asks)
+import Control.Monad.Reader (ReaderT, MonadReader, runReaderT, asks, ask)
 import Control.Monad.Writer (WriterT, MonadWriter, runWriterT, tell)
 import Control.Monad.State (StateT, MonadState, evalStateT, modify, gets)
 import Control.Monad.Error (ErrorT, MonadError, runErrorT, throwError, catchError)
diff --git a/src/Paths.hs b/src/Paths.hs
--- a/src/Paths.hs
+++ b/src/Paths.hs
@@ -1,6 +1,7 @@
 module Paths ( hseDirStructure
              , cabalConfigLocation
              , dotDirName
+             , constructDotDirName
              , insidePathVar
              ) where
 
@@ -32,11 +33,14 @@
                       , ghcBinDir      = ghcDirLocation </> "bin"
                       }
 
+constructDotDirName :: Options -> String
+constructDotDirName opts = maybe ".hsenv" (".hsenv_" ++) (hsEnvName opts)
+
 -- directory name of hsEnvDir
 dotDirName :: MyMonad String
 dotDirName = do
-  name <- asks hsEnvName
-  return $ ".hsenv_" ++ name
+  opts <- ask
+  return $ constructDotDirName opts
 
 -- returns location of cabal's config file inside virtual environment dir structure
 cabalConfigLocation :: MyMonad FilePath
diff --git a/src/Types.hs b/src/Types.hs
--- a/src/Types.hs
+++ b/src/Types.hs
@@ -19,10 +19,11 @@
 
 data Options = Options { verbosity       :: Verbosity
                        , skipSanityCheck :: Bool
-                       , hsEnvName       :: String -- Virtual Haskell Environment name
+                       , hsEnvName       :: Maybe String -- Virtual Haskell Environment name
                        , ghcSource       :: GhcSource
                        , makeCmd         :: String -- make substitute used for 'make install' of external GHC
                        , noSharing       :: Bool   -- don't share ~/.cabal/packages
+                       , noPS1           :: Bool   -- Don't modify shell prompt
                        }
 
 data MyState = MyState { logDepth :: Integer -- used for indentation of logging messages
diff --git a/src/hsenv.hs b/src/hsenv.hs
--- a/src/hsenv.hs
+++ b/src/hsenv.hs
@@ -7,7 +7,7 @@
 import Actions
 import SanityCheck (sanityCheck)
 import Args (getArgs)
-import Paths (dotDirName)
+import Paths (dotDirName, constructDotDirName)
 
 main :: IO ()
 main = do
@@ -22,7 +22,7 @@
                 writeFile "hsenv.log" errorLog
                 exitFailure
     Right ()  -> do
-                let dotDir = ".hsenv_" ++ hsEnvName options
+                let dotDir = constructDotDirName options
                 writeFile (dotDir </> "hsenv.log") $ unlines messageLog
 
 realMain :: MyMonad ()
