diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,5 +1,7 @@
 # Command Line Interface Tweeter
 
+[![Build Status](https://travis-ci.org/vmchale/command-line-tweeter.svg?branch=master)](https://travis-ci.org/vmchale/command-line-tweeter)
+
 ![Displaying a user timeline in a terminal.](https://raw.githubusercontent.com/vmchale/command-line-tweeter/master/screenshot.png)
 ## Config
 Generate a token to authorize access to your twitter account by following the guide [here](https://dev.twitter.com/oauth/overview/application-owner-access-tokens)
diff --git a/src/Web/Tweet/API.hs b/src/Web/Tweet/API.hs
--- a/src/Web/Tweet/API.hs
+++ b/src/Web/Tweet/API.hs
@@ -41,7 +41,7 @@
 
 -- | Gets user profile with max_id set.
 getProfileMax :: String -> Int -> FilePath -> Maybe Int -> IO (Either (ParseError Char Dec) Timeline)
-getProfileMax screenName count filepath maxId = getTweets . BSL.toStrict <$> getProfileRaw screenName count filepath maxId
+getProfileMax = fmap (getTweets . BSL.toStrict) .*** getProfileRaw
 
 -- | Gets user profile with max_id set.
 getProfileRaw :: String -> Int -> FilePath -> Maybe Int -> IO BSL.ByteString
@@ -50,6 +50,15 @@
         (Just id) -> "?screen_name=" ++ screenName ++ "&count=" ++ (show count) ++ "&max_id=" ++ (show id) ;
         Nothing -> "?screen_name=" ++ screenName ++ "&count=" ++ (show count) }
 
+-- | Get mentions and parse response as a list of tweets
+mentions :: Int -> FilePath -> IO (Either (ParseError Char Dec) Timeline)
+mentions = fmap (getTweets . BSL.toStrict) .* mentionsRaw
+
+-- | Gets mentions
+mentionsRaw :: Int -> FilePath -> IO BSL.ByteString
+mentionsRaw count filepath = getRequest ("https://api.twitter.com/1.1/statuses/user_timeline.json" ++ requestString) filepath
+    where requestString = "?count=" ++ (show count)
+
 -- | Get user profile given screen name and how many tweets to return
 getProfile :: String -> Int -> FilePath -> IO (Either (ParseError Char Dec) Timeline)
 getProfile screenName count filepath = getProfileMax screenName count filepath Nothing
@@ -57,11 +66,11 @@
 -- | Show a user profile given screen name, how many tweets to return, 
 -- and whether to print them in color.
 showProfile :: String -> Int -> Bool -> FilePath -> IO String
-showProfile screenName count color filepath = showTweets color <$> getProfile screenName count filepath
+showProfile screenName count color = fmap (showTweets color) . getProfile screenName count
 
 -- | Show the most successful tweets by a given user, given their screen name. 
 showBest :: String -> Int -> Bool -> FilePath -> IO String
-showBest screenName n color filepath = showTweets color . pure . (take n . hits) <$> getAll screenName Nothing filepath 
+showBest screenName n color = fmap (showTweets color . pure . (take n . hits)) . getAll screenName Nothing
 
 -- | Display user timeline
 showTimeline :: Int -> Bool -> FilePath -> IO String
@@ -88,18 +97,34 @@
 deleteTweet :: Integer -> FilePath -> IO ()
 deleteTweet = (fmap void) . deleteTweetRaw
 
+-- | Get response, i.e. the tweet deleted
+deleteTweetResponse :: Integer -> FilePath -> IO (Either (ParseError Char Dec) Timeline)
+deleteTweetResponse = fmap (getTweets . BSL.toStrict) .* deleteTweetRaw
+
 -- | Favorite a tweet given its id
 favoriteTweet :: Integer -> FilePath -> IO ()
 favoriteTweet = (fmap void) . favoriteTweetRaw
 
+-- | Favorite a tweet and returned the (parsed) response
+favoriteTweetResponse :: Integer -> FilePath -> IO (Either (ParseError Char Dec) Timeline)
+favoriteTweetResponse = fmap (getTweets . BSL.toStrict) .* favoriteTweetRaw
+
 -- | Unfavorite a tweet given its id
 unfavoriteTweet :: Integer -> FilePath -> IO ()
 unfavoriteTweet = (fmap void) . unfavoriteTweetRaw
 
+-- | Unfavorite a tweet and returned the (parsed) response
+unfavoriteTweetResponse :: Integer -> FilePath -> IO (Either (ParseError Char Dec) Timeline)
+unfavoriteTweetResponse = fmap (getTweets . BSL.toStrict) .* unfavoriteTweetRaw
+
 -- | Unretweet a tweet given its id
 unretweetTweet :: Integer -> FilePath -> IO ()
 unretweetTweet = (fmap void) . unretweetTweetRaw
 
+-- | Unretweet a tweet and returned the (parsed) response
+unretweetTweetResponse :: Integer -> FilePath -> IO (Either (ParseError Char Dec) Timeline)
+unretweetTweetResponse = fmap (getTweets . BSL.toStrict) .* unretweetTweetRaw
+
 -- | Unfollow a user given their screen name
 unfollow :: String -> FilePath -> IO ()
 unfollow = (fmap void) . unfollowUserRaw
@@ -108,9 +133,21 @@
 follow :: String -> FilePath -> IO ()
 follow = (fmap void) . followUserRaw
 
+-- | Block a user given their screen name
+block :: String -> FilePath -> IO ()
+block = (fmap void) . blockUserRaw
+
+-- | Unblock a user given their screen name
+unblock :: String -> FilePath -> IO ()
+unblock = (fmap void) . unblockUserRaw
+
 -- | Retweet a tweet given its id
 retweetTweet :: Integer -> FilePath -> IO ()
 retweetTweet = (fmap void) . retweetTweetRaw
+
+-- | Retweet a tweet and returned the (parsed) response
+retweetTweetResponse :: Integer -> FilePath -> IO (Either (ParseError Char Dec) Timeline)
+retweetTweetResponse = fmap (getTweets . BSL.toStrict) .* retweetTweetRaw
 
 -- | Favorite a tweet given its id; return bytestring response
 favoriteTweetRaw :: Integer -> FilePath -> IO BSL.ByteString
diff --git a/src/Web/Tweet/Exec.hs b/src/Web/Tweet/Exec.hs
--- a/src/Web/Tweet/Exec.hs
+++ b/src/Web/Tweet/Exec.hs
@@ -14,16 +14,17 @@
 import System.Directory
 
 -- | Data type for our program: one optional path to a credential file, (optionally) the number of tweetInputs to make, the id of the status you're replying to, and a list of users you wish to mention.
-data Program = Program { subcommand :: Command , cred :: Maybe FilePath }
+data Program = Program { subcommand :: Command , cred :: Maybe FilePath , color :: Bool }
 
 -- | Data type for a command
 -- TODO add boolean option to show ids alongside tweets
-data Command = Timeline { count :: Maybe Int , color :: Bool }
+data Command = Timeline { count :: Maybe Int }
     | SendInput { tweetInputs :: Maybe Int, replyId :: Maybe String, replyHandles :: Maybe [String] }
-    | Profile { count :: Maybe Int , color :: Bool , screenName :: String }
+    | Profile { count :: Maybe Int , screenName :: String }
+    | Mentions { count :: Maybe Int }
     | Markov { screenName :: String }
     | Send { tweets :: Maybe Int , replyId :: Maybe String , replyHandles :: Maybe [String] , userInput :: String }
-    | Sort { color :: Bool , screenName :: String , count :: Maybe Int }
+    | Sort { screenName :: String , count :: Maybe Int }
     | Delete { twId :: Integer }
     | Fav { twId :: Integer }
     | Unfav { twId :: Integer }
@@ -31,6 +32,8 @@
     | Unretweet { twId :: Integer }
     | Follow { screenName :: String }
     | Unfollow { screenName :: String }
+    | Block { screenName :: String }
+    | Unblock { screenName :: String }
     | Dump { screenName :: String }
 
 -- | query twitter to post stdin with no fancy options
@@ -58,48 +61,55 @@
 
 -- | Executes program given parsed `Program`
 select :: Program -> IO ()
-select (Program com maybeFile) = case maybeFile of
-    (Just file) -> selectCommand com file
-    _ -> selectCommand com =<< (++ "/.cred") <$> getHomeDirectory
+select (Program com maybeFile color) = case maybeFile of
+    (Just file) -> selectCommand com color file
+    _ -> selectCommand com color =<< (++ "/.cred") <$> getHomeDirectory
 
 -- | Executes subcommand given subcommand + filepath to configuration file
-selectCommand :: Command -> FilePath -> IO ()
-selectCommand (Send maybeNum Nothing Nothing input) file = fromCLI input (maybe 15 id maybeNum) file
-selectCommand (Send maybeNum (Just replyId) Nothing input) file = thread input [] (pure . read $ replyId) (maybe 15 id maybeNum) file
-selectCommand (Send maybeNum Nothing (Just handles) input) file = thread input handles Nothing (maybe 15 id maybeNum) file
-selectCommand (SendInput maybeNum Nothing Nothing) file  = fromStdIn (maybe 15 id maybeNum) file
-selectCommand (SendInput maybeNum (Just replyId) (Just handles)) file = threadStdIn handles (pure . read $ replyId) (maybe 15 id maybeNum) file
-selectCommand (SendInput maybeNum (Just replyId) Nothing) file = threadStdIn [] (pure . read $ replyId) (maybe 15 id maybeNum) file
-selectCommand (SendInput maybeNum Nothing (Just handles)) file = threadStdIn handles Nothing (maybe 15 id maybeNum) file
-selectCommand (Timeline maybeNum color) file = putStrLn =<< showTimeline (maybe 11 id maybeNum) color file
-selectCommand (Profile maybeNum color name) file = putStrLn =<< showProfile name (maybe 11 id maybeNum) color file
-selectCommand (Sort color name maybeNum) file = putStrLn =<< showBest name (maybe 11 id maybeNum) color file
-selectCommand (Markov name) file = do
+selectCommand :: Command -> Bool -> FilePath -> IO ()
+selectCommand (Send maybeNum Nothing Nothing input) _ file = fromCLI input (maybe 15 id maybeNum) file
+selectCommand (Send maybeNum (Just replyId) Nothing input) _ file = thread input [] (pure . read $ replyId) (maybe 15 id maybeNum) file
+selectCommand (Send maybeNum Nothing (Just handles) input) _ file = thread input handles Nothing (maybe 15 id maybeNum) file
+selectCommand (SendInput maybeNum Nothing Nothing) _ file  = fromStdIn (maybe 15 id maybeNum) file
+selectCommand (SendInput maybeNum (Just replyId) (Just handles)) _ file = threadStdIn handles (pure . read $ replyId) (maybe 15 id maybeNum) file
+selectCommand (SendInput maybeNum (Just replyId) Nothing) _ file = threadStdIn [] (pure . read $ replyId) (maybe 15 id maybeNum) file
+selectCommand (SendInput maybeNum Nothing (Just handles)) _ file = threadStdIn handles Nothing (maybe 15 id maybeNum) file
+selectCommand (Timeline maybeNum) color file = putStrLn =<< showTimeline (maybe 11 id maybeNum) color file
+selectCommand (Mentions maybeNum) color file = putStrLn =<< showTweets color <$> mentions (maybe 11 id maybeNum) file
+selectCommand (Profile maybeNum name) color file = putStrLn =<< showProfile name (maybe 11 id maybeNum) color file
+selectCommand (Sort name maybeNum) color file = putStrLn =<< showBest name (maybe 11 id maybeNum) color file
+selectCommand (Markov name) _ file = do
     raw <- getMarkov name Nothing file
     writeFile (name ++ ".txt") (unlines raw)
     putStrLn $ "Written output to: " ++ name ++ ".txt"
-selectCommand (Delete n) file = do
-    deleteTweet n file
-    putStrLn "...tweet deleted successfully!"
-selectCommand (Fav n) file = do
-    favoriteTweet n file
-    putStrLn "...tweet favorited successfully!"
-selectCommand (Unfav n) file = do
-    unfavoriteTweet n file
-    putStrLn "...tweet unfavorited successfully!"
-selectCommand (Retweet n) file = do
-    retweetTweet n file
-    putStrLn "...tweet retweeted successfully!"
-selectCommand (Unretweet n) file = do
-    unretweetTweet n file
-    putStrLn "...tweet retweeted successfully!"
-selectCommand (Follow screenName) file = do
+selectCommand (Delete n) color file = do
+    putStrLn "Deleted:\n"
+    putStrLn =<< showTweets color <$> deleteTweetResponse n file
+selectCommand (Fav n) color file = do
+    putStrLn "Favorited:\n"
+    putStrLn =<< showTweets color <$> favoriteTweetResponse n file
+selectCommand (Unfav n) color file = do
+    putStrLn "Unfavorited:\n"
+    putStrLn =<< showTweets color <$> unfavoriteTweetResponse n file
+selectCommand (Retweet n) color file = do
+    putStrLn "Retweeted:\n"
+    putStrLn =<< showTweets color <$> retweetTweetResponse n file
+selectCommand (Unretweet n) color file = do
+    putStrLn "Unretweeted:\n"
+    putStrLn =<< showTweets color <$> unretweetTweetResponse n file
+selectCommand (Follow screenName) _ file = do
     follow screenName file
     putStrLn ("..." ++ screenName ++ " followed successfully!")
-selectCommand (Unfollow screenName) file = do
+selectCommand (Unfollow screenName) _ file = do
     unfollow screenName file
     putStrLn ("..." ++ screenName ++ " unfollowed successfully!")
-selectCommand (Dump screenName) file = BSL.putStrLn =<< (getProfileRaw screenName 3200 file Nothing)
+selectCommand (Block screenName) color file = do
+    block screenName file
+    putStrLn ("..." ++ screenName ++ " blocked successfully")
+selectCommand (Unblock screenName) color file = do
+    unblock screenName file
+    putStrLn ("..." ++ screenName ++ " unblocked successfully")
+selectCommand (Dump screenName) color file = BSL.putStrLn =<< (getProfileRaw screenName 3200 file Nothing)
 
 -- | Parser to return a program datatype
 program :: Parser Program
@@ -118,12 +128,19 @@
         <> command "rt" (info rt (progDesc "Retweet a tweet"))
         <> command "follow" (info fol (progDesc "Follow a user"))
         <> command "unfollow" (info unfol (progDesc "Unfollow a user"))
-        <> command "dump" (info dump (progDesc "Dump tweets (for debugging)"))))
+        <> command "dump" (info dump (progDesc "Dump tweets (for debugging)"))
+        <> command "block" (info blockParser (progDesc "Block a user"))
+        <> command "unblock" (info unblockParser (progDesc "Unblock a user"))
+        <> command "mention" (info mentionsParser (progDesc "Fetch mentions"))))
     <*> (optional $ strOption
         (long "cred"
         <> short 'c'
         <> metavar "CREDENTIALS"
         <> help "path to credentials"))
+    <*> switch
+        (long "color"
+        <> short 'l'
+        <> help "Display timeline with colorized terminal output.")
 
 -- | Parser for the view subcommand
 timeline :: Parser Command
@@ -133,24 +150,28 @@
         <> short 'n'
         <> metavar "NUM"
         <> help "number of tweetInputs to fetch, default 5"))
-    <*> switch
-        (long "color"
-        <> short 'l'
-        <> help "Display timeline with colorized terminal output.")
 
--- | Parser for the raw subcommand
+-- | Parser for the markov subcommand
 markov :: Parser Command
 markov = Markov <$> user
 
--- | Parser for the raw subcommand
+-- | Parser for the follow subcommand
 fol :: Parser Command
 fol = Follow <$> user
 
--- | Parser for the raw subcommand
+-- | Parser for the block subcommand
+blockParser :: Parser Command
+blockParser = Block <$> user
+
+-- | Parser for the unblock subcommand
+unblockParser :: Parser Command
+unblockParser = Unblock <$> user
+
+-- | Parser for the dump subcommand
 dump :: Parser Command
 dump = Dump <$> user
 
--- | Parser for the raw subcommand
+-- | Parser for the unfollow subcommand
 unfol :: Parser Command
 unfol = Unfollow <$> user
 
@@ -194,22 +215,23 @@
         <> short 'n'
         <> metavar "NUM"
         <> help "Number of tweetInputs to fetch, default 12"))
-    <*> switch
-        (long "color"
-        <> short 'l'
-        <> help "Whether to display profile with colorized terminal output")
     <*> argument str
         (metavar "SCREEN_NAME"
         <> help "Screen name of user you want to view.")
 
+-- | Parser for the mention subcommand
+mentionsParser :: Parser Command
+mentionsParser = Mentions
+    <$> (optional $ read <$> strOption
+        (long "count"
+        <> short 'n'
+        <> metavar "NUM"
+        <> help "Number of tweetInputs to fetch, default 12"))
+
 -- | Parse best tweets
 best :: Parser Command
 best = Sort
-    <$> switch
-        (long "color"
-        <> short 'l'
-        <> help "Display timeline with colorized terminal output.")
-    <*> argument str
+    <$> argument str
         (metavar "SCREEN_NAME"
         <> help "Screen name of user you want to view.")
     <*> (optional $ read <$> strOption
diff --git a/src/Web/Tweet/Utils.hs b/src/Web/Tweet/Utils.hs
--- a/src/Web/Tweet/Utils.hs
+++ b/src/Web/Tweet/Utils.hs
@@ -3,9 +3,6 @@
 
 import qualified Data.ByteString.Char8 as BS
 import qualified Data.ByteString as BS2
-import qualified Data.ByteString.Lazy as BSL
-import qualified Data.Text as T
-import Data.Text.Encoding
 import Data.Char
 import Data.List
 import Web.Tweet.Types
@@ -16,9 +13,6 @@
 import Data.List.Extra
 import Web.Tweet.Parser
 import Text.Megaparsec
-
-bytestringToText :: BSL.ByteString -> T.Text
-bytestringToText = decodeUtf8 . BSL.toStrict
 
 -- | filter out retweets, and sort by most successful.
 hits :: Timeline -> Timeline
diff --git a/tweet-hs.cabal b/tweet-hs.cabal
--- a/tweet-hs.cabal
+++ b/tweet-hs.cabal
@@ -1,5 +1,5 @@
 name: tweet-hs
-version: 0.5.2.0
+version: 0.5.3.0
 cabal-version: >=1.10
 build-type: Simple
 license: BSD3
@@ -70,7 +70,7 @@
     main-is: Main.hs
     build-depends:
         base >=4.9.1.0 && <4.10,
-        tweet-hs >=0.5.2.0 && <0.6
+        tweet-hs >=0.5.3.0 && <0.6
     default-language: Haskell2010
     hs-source-dirs: app
 
@@ -79,7 +79,7 @@
     main-is: Spec.hs
     build-depends:
         base >=4.9.1.0 && <4.10,
-        tweet-hs >=0.5.2.0 && <0.6,
+        tweet-hs >=0.5.3.0 && <0.6,
         hspec >=2.4.2 && <2.5,
         hspec-megaparsec >=0.3.1 && <0.4,
         megaparsec >=5.2.0 && <5.3,
@@ -99,7 +99,7 @@
     build-depends:
         base >=4.9.1.0 && <4.10,
         criterion >=1.1.4.0 && <1.2,
-        tweet-hs >=0.5.2.0 && <0.6,
+        tweet-hs >=0.5.3.0 && <0.6,
         megaparsec >=5.2.0 && <5.3,
         bytestring >=0.10.8.1 && <0.11
     default-language: Haskell2010
