diff --git a/batch-rename.cabal b/batch-rename.cabal
--- a/batch-rename.cabal
+++ b/batch-rename.cabal
@@ -10,7 +10,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.1.0.9
+version:             0.1.1.0
 
 -- A short (one-line) description of the package.
 synopsis:            Make Linux or MacOS do things like "rename *.mp3 *.mp4"
diff --git a/batchRename.hs b/batchRename.hs
--- a/batchRename.hs
+++ b/batchRename.hs
@@ -1,19 +1,16 @@
 import Data.List
+import Data.Maybe
 import System.Directory
 import System.Environment
 import System.FilePath.Glob
-import System.FilePath.Posix
+import System.FilePath
 
 usage :: IO ()
 usage = do progName <- getProgName
            putStrLn ("Usage:\n\t" ++ progName ++ " \"srcPattern\" \"dstPattern\"")
 
-hasWildcard :: [Char] -> Bool
-hasWildcard name = 1 == (length $ filter (\x -> x == '*') name)
-
-bruteIndex e l = case (elemIndex e l) of
-                   Just x -> x
-                   Nothing -> 0
+hasWildcard :: String -> Bool
+hasWildcard name = 1 == length (filter (== '*') name)
 
 trimHeadTail s pre pos = let
   nohead = drop (length pre) s in
@@ -22,20 +19,20 @@
 
 partRename preL posL preR posR name = 
   let fn = takeFileName name in
-  renameFile fn (preR ++ (trimHeadTail fn preL posL) ++ posR)
+  renameFile fn (preR ++ 
+                      trimHeadTail fn preL posL ++
+                      posR)
 
-batchRename :: [Char] -> [Char] -> IO ()
+fetchPrePos s = let idx = fromMaybe 0 (elemIndex '*' s) in
+  (take idx s, drop (idx + 1) s)
+
+batchRename :: String -> String -> IO ()
 batchRename left right = if hasWildcard left && hasWildcard right then
-                           let wildcardLeftIndex = bruteIndex '*' left
-                               oldPreLeft = take wildcardLeftIndex left 
-                               oldPosLeft = drop (wildcardLeftIndex + 1) left
-                               wildcardRightIndex = bruteIndex '*' right
-                               oldPreRight = take wildcardRightIndex right
-                               oldPosRight = drop (wildcardRightIndex + 1) right in
+                           let (oldPreLeft, oldPosLeft) = fetchPrePos left
+                               (oldPreRight, oldPosRight) = fetchPrePos right in
                              do files <- glob left
-                                sequence_ (map (partRename oldPreLeft oldPosLeft
-                                                          oldPreRight oldPosRight)
-                                               files)
+                                mapM_ (partRename oldPreLeft oldPosLeft oldPreRight oldPosRight)
+                                      files
                          else
                            putStrLn "Oops, use simple rename please."
 main :: IO ()
