diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -57,6 +57,7 @@
 These languages will be scanned for any TODO's:
 
 - C/C++
+- C#
 - Elixir
 - Erlang
 - Go
@@ -64,7 +65,9 @@
 - Java
 - Javascript
 - Kotlin
+- Lua
 - Objective-C
+- PHP
 - Protobuf
 - Python
 - Ruby
diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -11,9 +11,9 @@
 
 import qualified Control.Exception          as E
 import           Control.Monad
+import           Control.Monad              (forM)
 import           Control.Monad.IO.Class
 import           Data.Aeson
-import qualified Data.ByteString.Char8      as B8SS
 import           Data.Either
 import           Data.IORef
 import           Data.List
@@ -152,25 +152,16 @@
            fileLines)
   liftIO $ writeFile (sourceFile todo) $ unlines updatedLines
 
-removeAndAdjust :: [TodoEntry] -> IO [TodoEntry]
-removeAndAdjust deleteList =
-  if null deleteList
-    then return []
-    else let deleteItem = head deleteList
-             rest = tail deleteList
-         in do _ <- removeTodoFromCode deleteItem
-               return $
-                 map
-                   (\t ->
-                      if (sourceFile t == sourceFile deleteItem) &&
-                         (lineNumber t > lineNumber deleteItem)
-                        then t
-                             { lineNumber =
-                                 lineNumber t -
-                                 (fromIntegral . length $ body deleteItem)
-                             }
-                        else t)
-                   rest
+removeAndAdjust :: MonadIO io => [TodoEntry] -> io [TodoEntry]
+removeAndAdjust [] = return []
+removeAndAdjust (x:xs) = do
+  removeTodoFromCode x
+  forM xs $ \t ->
+    if (sourceFile t == sourceFile x) &&
+       (lineNumber t > lineNumber x)
+    then return $ t { lineNumber = lineNumber t - (fromIntegral . length $ body x)
+                    }
+    else return t
 
 deleteTodos :: ToodlesState -> DeleteTodoRequest -> Handler T.Text
 deleteTodos (ToodlesState ref _) req = do
@@ -184,7 +175,7 @@
         }
   _ <-
     liftIO $ atomicModifyIORef' ref (const (updeatedResults, updeatedResults))
-  return $ T.pack "{}"
+  return "{}"
 
 editTodos :: ToodlesState -> EditTodoRequest -> Handler T.Text
 editTodos (ToodlesState ref _) req = do
@@ -198,7 +189,7 @@
           r
       editedFilteredList = filter (willEditTodo req) editedList
   _ <- mapM_ recordUpdates editedFilteredList
-  return $ T.pack "{}"
+  return "{}"
   where
     willEditTodo :: EditTodoRequest -> TodoEntry -> Bool
     willEditTodo editRequest entry = Main.id entry `elem` editIds editRequest
@@ -223,7 +214,7 @@
   let comment =
         fromJust $ lookup ("." <> getExtension (sourceFile t)) fileTypeToComment
       detail =
-        T.pack "TODO (" <>
+        "TODO (" <>
         (T.pack $
          Data.String.Utils.join
            "|"
@@ -231,7 +222,7 @@
             listIfNotNull (fmap (T.pack . maybe "" ((\n -> "p=" ++ n) . show)) priority t) ++
             tags t ++
             map (\a -> fst a <> "=" <> snd a) (customAttributes t))) <>
-        (T.pack ") ")
+        ") "
       fullNoComments = mapHead (\l -> detail <> "- " <> l) $ body t
       commented = map (\l -> comment <> " " <> l) fullNoComments in
       mapHead (\l -> leadingText t <> l) $
@@ -311,6 +302,7 @@
   [ (".c", "//")
   , (".clj", ";;")
   , (".cpp", "//")
+  , (".cs", "//")  
   , (".ex", "#")
   , (".erl", "%")
   , (".go", "//")
@@ -319,7 +311,9 @@
   , (".js", "//")
   , (".kt", "//")
   , (".kts", "//")
+  , (".lua", "--")
   , (".m", "//")
+  , (".php", "//")
   , (".proto", "//")
   , (".py", "#")
   , (".rb", "#")
@@ -531,7 +525,7 @@
   in do
         configExists <- doesFileExist $ projectRoot ++ "/.toodles.yaml"
         config <- if configExists
-          then Y.decodeEither' . B8SS.pack <$> readFile (projectRoot ++ "/.toodles.yaml")
+          then Y.decodeFileEither (projectRoot ++ "/.toodles.yaml")
           else return . Right $ ToodlesConfig []
         when (isLeft config)
           $ putStrLn $ "[WARNING] Invalid .toodles.yaml: " ++ show config
diff --git a/toodles.cabal b/toodles.cabal
--- a/toodles.cabal
+++ b/toodles.cabal
@@ -1,6 +1,6 @@
 cabal-version: >=1.10
 name: toodles
-version: 0.1.0.11
+version: 0.1.0.12
 license: MIT
 copyright: 2018 Avi Press
 maintainer: mail@avi.press
@@ -38,11 +38,10 @@
     default-language: Haskell2010
     ghc-options: -threaded -rtsopts -with-rtsopts=-N
     build-depends:
-        MissingH ==1.4.0.1,
+        MissingH >=1.4.0.1 && <1.5,
         aeson ==1.3.1.1,
         base >=4.0 && <5,
         blaze-html ==0.9.1.1,
-        bytestring ==0.10.8.2,
         cmdargs ==0.10.20,
         directory ==1.3.1.5,
         filepath ==1.4.2,
