diff --git a/pgdl.cabal b/pgdl.cabal
--- a/pgdl.cabal
+++ b/pgdl.cabal
@@ -1,6 +1,6 @@
 
 name:                pgdl
-version:             8.0
+version:             8.1
 license:             PublicDomain
 license-file:        LICENSE
 author:              sifmelcara
diff --git a/src/AskScene.hs b/src/AskScene.hs
--- a/src/AskScene.hs
+++ b/src/AskScene.hs
@@ -20,9 +20,9 @@
     downB <- newButton "Yes"
     quitB <- newButton "Quit"
     remvB <- newButton "Remov"
-    buttonBox <- (mkwIO playB) <++> (mkwIO downB) <++> (mkwIO quitB) <++> (mkwIO remvB)
+    buttonBox <- mkwIO playB <++> mkwIO downB <++> mkwIO quitB <++> mkwIO remvB
     b <- do
-        bx <- (plainText "    Download it again?") <--> (return buttonBox)
+        bx <- plainText "    Download it again?" <--> return buttonBox
         setBoxSpacing bx 1
         withPadding (padAll 1) bx
     fg <- newFocusGroup
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -105,13 +105,16 @@
             onScePlay dlg $ \_ -> do
                 Just (_, (itm, _)) <- getSelected lst
                 justPlay itm
+                chgls
             onSceDown dlg $ \_ -> do
                 Just (_, (itm, _)) <- getSelected lst
                 playVid itm
+                chgls
             onSceQuit dlg $ const exitSuccess
             onSceRemv dlg $ \_ -> do
                 Just (_, (itm, _)) <- getSelected lst
                 removeVid itm
+                chgls
 
             onSelectionChange lst $ \sle -> case sle of
                 SelectionOn _ itm _ -> setText statBar =<< genStat itm
diff --git a/src/PrsVid.hs b/src/PrsVid.hs
--- a/src/PrsVid.hs
+++ b/src/PrsVid.hs
@@ -11,7 +11,7 @@
 
 prsHtm :: T.Text -> [Video]
 prsHtm t = if null vs then [noVideo] else vs
-    where vs = sortVid $ (prsVid t) ++ (prsFld t)
+    where vs = sortVid $ prsVid t ++ prsFld t
           noVideo = Video "No video in this folder." "" "" ""
 
 prsVid :: T.Text -> [Video]
diff --git a/src/RealWorld.hs b/src/RealWorld.hs
--- a/src/RealWorld.hs
+++ b/src/RealWorld.hs
@@ -11,7 +11,6 @@
 import System.Process
 import System.Directory
 import System.FilePath.Posix
-import System.Exit
 import qualified Data.Text as T
 
 -- play a video
@@ -40,9 +39,11 @@
         OSX   -> runCommand $ "open " ++ addq localloc ++ " -a vlc"
         Linux -> runCommand $ "nohup vlc -f " ++ addq localloc ++ " &>/dev/null &"
         _     -> error "OS unsupported!"
-    exitSuccess
+    return ()
+    -- exitSuccess
   where vn = T.unpack . vidName $ vid
         vu = T.unpack . vidLink $ vid
+        addq :: String -> String
         addq s = "\"" ++ s ++ "\""
 
 justPlay :: Video -> IO ()
@@ -53,8 +54,10 @@
         OSX   -> runCommand $ "open " ++ addq localloc ++ " -a vlc"
         Linux -> runCommand $ "nohup vlc -f " ++ addq localloc ++ " &>/dev/null &"
         _     -> error "OS unsupported!"
-    exitSuccess
+    return ()
+    -- exitSuccess
   where vn = T.unpack . vidName $ vid
+        addq :: String -> String
         addq s = "\"" ++ s ++ "\""
     
 -- | remove a video 
@@ -62,7 +65,8 @@
 removeVid vid = do
     localDir <- getLocaldir
     removeFile $ localDir </> vn
-    exitSuccess
+    return ()
+    -- exitSuccess
     where vn = T.unpack . vidName $ vid
 
 -- | determine whether a video is downloaded
diff --git a/src/UI.hs b/src/UI.hs
--- a/src/UI.hs
+++ b/src/UI.hs
@@ -13,6 +13,7 @@
 import Graphics.Vty.Widgets.All
 import Data.IORef
 import Data.List
+import Control.Concurrent
 
 type WL = Widget (List Video FormattedText)
 type VidStat = ([Video], Video)
@@ -32,8 +33,12 @@
 
 filterVList :: VList -> (Video -> Bool) -> IO ()
 filterVList vl@(VList wl _) ok = do
-    storeState vl
-    setListVideos wl . filter ok =<< getListVideos wl
+    origVids <- getListVideos wl
+    case filter ok origVids of
+        [] -> return ()
+        res -> do
+            storeState vl
+            setListVideos wl res
 
 sortVList :: VList -> (Video -> Video -> Ordering) -> IO ()
 sortVList vl@(VList wl _) cmp = do
@@ -66,6 +71,7 @@
 tryExit :: Widget FocusGroup -> Key -> [Modifier] -> IO Bool
 tryExit _ key _ = case key of
     KChar 'q' -> exitSuccess
+    KEsc      -> exitSuccess
     _         -> return False
 
 fex :: Video -> IO Bool
@@ -108,15 +114,18 @@
             Nothing -> return ()
 
 colorDecide :: WL -> IO ()
-colorDecide lst = 
-    onSelectionChange lst $ \sle -> case sle of
-        SelectionOn _ itm _ -> if isFld itm
-            then setFocusAttribute lst (black `on` magenta)
-                    -- folder's color
+colorDecide lst = do
+    forkIO . forever $ do
+        schedule $ do
+            Just (_, (itm, _)) <- getSelected lst
+            if isFld itm then
+                setFocusAttribute lst (black `on` magenta)
+                        -- folder's color
             else fex itm >>= \case
-                True  -> setFocusAttribute lst (black `on` red) 
-                         -- if video have been download, use red color
-                False -> setFocusAttribute lst (black `on` cyan)
-                         -- if video haven't been download, use cyan
-        _                   -> return ()
+                    True  -> setFocusAttribute lst (black `on` red) 
+                             -- if video have been download, use red color
+                    False -> setFocusAttribute lst (black `on` cyan)
+                             -- if video haven't been download, use cyan
+        threadDelay 50000 -- 0.05 second
+    return ()
 
