diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,7 +1,9 @@
 # pgdl
-a terminal user interface program that downloads a video from html and plays immediately.(Calling vlc)
 
-Only for Linux and MACOSX.
+a terminal user interface program that downloads a video from html and call vlc to play it immediately.
 
-It parses a remote html file which has link tag & filename tag in the same line.
+Client: Only for Linux and MACOSX.
+Server: Only for nginx's file download page.
+    
+The program will sort the files by date while the files in nginx's download page just show in file names' order.
 
diff --git a/pgdl.cabal b/pgdl.cabal
--- a/pgdl.cabal
+++ b/pgdl.cabal
@@ -1,6 +1,6 @@
 
 name:                pgdl
-version:             6.9
+version:             7.0
 license:             PublicDomain
 license-file:        LICENSE
 author:              sifmelcara
@@ -9,12 +9,13 @@
 build-type:          Simple
 extra-source-files:  README.md
 cabal-version:       >=1.10
-description:         a terminal user interface program that downloads a video from html and plays immediately.(Calling vlc)
+description:         a terminal user interface program that downloads a video from html and call vlc to play it immediately.
                      .
-                     Only for Linux and MACOSX.
+                     Client: Only for Linux and MACOSX.
                      .
-                     It parses a remote html file which has link tag & filename tag in the same line.
+                     Server: Only for nginx's file download page.
                      .
+                     The program will sort the files by date while files in nginx's download page just sort in file name.
 synopsis:            pgdownloader
 
 source-repository head
@@ -24,12 +25,13 @@
 executable pgdl
   hs-source-dirs:      src
   main-is:             Main.hs
-  other-modules:       Beaut, Chkcfg, FetchHtml, Getconfig, Log, PlayVid, PrsVid, Search, Video, GenStat, TestExist 
+  other-modules:       Beaut, Chkcfg, FetchHtml, Getconfig, Log, PlayVid, PrsVid, Search, Video, GenStat, TestExist,
+                       GenName, SortVid
   build-depends:       base == 4.* , split, process, 
                        directory, http-conduit >= 2.0.0, bytestring,
                        transformers, resourcet, tagsoup, 
                        vty, text, vty-ui >= 1.8,
-                       configurator >= 0.3.0.0,
+                       configurator >= 0.3.0.0, HTTP,
                        filepath, binary >= 0.7.0.0, Cabal
   ghc-options:         -threaded -O2
   default-language:    Haskell2010
diff --git a/src/Beaut.hs b/src/Beaut.hs
--- a/src/Beaut.hs
+++ b/src/Beaut.hs
@@ -8,14 +8,13 @@
 import qualified Data.Text as T
 
 beaut :: Video -> T.Text
-beaut vid
+beaut (Video str _ _ _)
     | length dat < 3 = "\n" `app` str
     | otherwise      = T.intercalate "\n" [tb 4 `app` sbt, 
                                            tb 10 `app` nme, 
                                            tb 30 `app` eps
                                           ]
-    where str = vidName vid
-          dat = spl str
+    where dat = spl str
           (sbt:nme:eps:_) = dat
           tb n = T.replicate n " "
           app s1 s2 = s1 `T.append` s2
diff --git a/src/Chkcfg.hs b/src/Chkcfg.hs
--- a/src/Chkcfg.hs
+++ b/src/Chkcfg.hs
@@ -13,16 +13,16 @@
               error "please config file at ~/.pgdl first!"
 
 defcfg = unlines [  "",
-                    "# example:",
-                    "# username = \"jack\"",
-                    "# password = \"mypassw\"",
-                    "# servpath = \"example.org/videodir/?C=M;O=D\"",
-                    "# localdir = \"/home/jack/Downloads/\"", 
+                    "# example: ",
+                    "# username = \"jack\" ",
+                    "# password = \"mypassw\" ",
+                    "# servpath = \"example.org/videodir/\" ",
+                    "# localdir = \"/home/jack/Downloads/\" ", 
                     "",
-                    "username = ",
-                    "password = ",
-                    "servpath = ",
-                    "localdir = ",
+                    "username = \"\"",
+                    "password = \"\"",
+                    "servpath = \"\"",
+                    "localdir = \"\"",
                     ""
                  ]
 
diff --git a/src/FetchHtml.hs b/src/FetchHtml.hs
--- a/src/FetchHtml.hs
+++ b/src/FetchHtml.hs
@@ -18,7 +18,9 @@
     username <- getUsername
     password <- getPassword
     servpath <- getServpath
-    return $ applyBasicAuth (tob username) (tob password) . fromJust . parseUrl $ "http://" ++ T.unpack servpath
+    case username of
+        "" -> return $ fromJust . parseUrl $ "http://" ++ T.unpack servpath
+        _  -> return $ applyBasicAuth (tob username) (tob password) . fromJust . parseUrl $ "http://" ++ T.unpack servpath
     where tob = encodeUtf8
 
 fetchHtml :: IO T.Text
diff --git a/src/GenName.hs b/src/GenName.hs
new file mode 100644
--- /dev/null
+++ b/src/GenName.hs
@@ -0,0 +1,10 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module GenName where
+
+import Network.HTTP.Base
+import qualified Data.Text as T
+
+genName :: T.Text -> T.Text
+genName = T.pack . urlDecode . T.unpack
+
diff --git a/src/GenStat.hs b/src/GenStat.hs
--- a/src/GenStat.hs
+++ b/src/GenStat.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE LambdaCase #-}
 
-module GenStat (genStat) where
+module GenStat (genStat, waitingBar) where
 
 import Video
 import TestExist
@@ -9,21 +9,22 @@
 import qualified Data.Text as T
 
 genStat :: Video -> IO T.Text
-genStat vid = do
+genStat (Video name _ size date) = do
     st <- toStr $ downloaded name
-    return $ (spc 3) `app` date `app`
-             (spc 3) `app` size `app`
-             (spc 20) `app` st `app`
-             (spc 30)
-    where date = vidDate vid
-          size = vidSize vid
-          name = vidName vid
-          app = T.append
+    return $ T.concat [ spc 3 , date
+                      , spc 5 , size
+                      , spc 20, st
+                      , spc 30
+                      ]
+    where app = T.append
           spc :: Int -> T.Text
           spc i = T.replicate i " "
 
+waitingBar = "   Waiting for data..." `T.append` T.replicate 99 " "
+
 toStr :: IO Bool -> IO T.Text
 toStr b = b >>= \case
     True -> return "Downloaded"
     _    -> return "Not Downloaded"
+
 
diff --git a/src/Log.hs b/src/Log.hs
--- a/src/Log.hs
+++ b/src/Log.hs
@@ -22,12 +22,7 @@
 
 instance Binary Video where
     put vid = put $ vidName vid
-    get = get >>=  (\name ->
-        return Video { vidName = name
-                     , vidLink = ""
-                     , vidDate = ""
-                     , vidSize = ""
-                     })
+    get = get >>= \name -> return $ Video name "" "" ""
 
 logname = ".pgdl.cache"
 
@@ -48,10 +43,5 @@
                 Right (_, _, vs) -> return vs
                 _                -> return dlnVid
         False -> return dlnVid
-    where dlnVid = [Video { vidName = "Downloading..."
-                          , vidLink = ""
-                          , vidDate = ""
-                          , vidSize = ""
-                          }
-                   ]
+    where dlnVid = [Video "Downloading..." "" "" ""]
 
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -37,7 +37,7 @@
     lfg <- newFocusGroup
     addToFocusGroup lfg lst
 
-    statBar <- plainText ""
+    statBar <- plainText waitingBar
     setNormalAttribute statBar (black `on` green)
 
     ui <- centered =<< hFixed 80 =<< vBox lst statBar
@@ -107,7 +107,9 @@
                     return True
                 _      -> return False
 
-            forkIO $ writeVid vdlst
+            (null <$> getArgs) >>= \case
+                True -> void . forkIO $ writeVid vdlst
+                _    -> return ()
             return ()
         return ()
 
diff --git a/src/PlayVid.hs b/src/PlayVid.hs
--- a/src/PlayVid.hs
+++ b/src/PlayVid.hs
@@ -26,8 +26,11 @@
     when fex $ removeFile localloc
 
     let purepath = reverse . dropWhile (/= '/') . reverse $ servpath
-    let url = "http://" ++ username ++ ":" ++ password ++ "@" ++ purepath ++ vu
-    runCommand $ "nohup curl " ++ addq url ++ " -o " ++ addq localloc ++ "&>/dev/null &"
+    case username of
+        ""  -> let url = "http://" ++                                       purepath ++ vu
+               in runCommand $ "nohup curl " ++ addq url ++ " -o " ++ addq localloc ++ "&>/dev/null &"
+        _   -> let url = "http://" ++ username ++ ":" ++ password ++ "@" ++ purepath ++ vu
+               in runCommand $ "nohup curl " ++ addq url ++ " -o " ++ addq localloc ++ "&>/dev/null &"
     let checkFile = doesFileExist localloc >>= \ready -> unless ready checkFile
     checkFile
     case buildOS of
diff --git a/src/PrsVid.hs b/src/PrsVid.hs
--- a/src/PrsVid.hs
+++ b/src/PrsVid.hs
@@ -3,6 +3,8 @@
 module PrsVid where
 
 import Video
+import GenName
+import SortVid
 
 import Data.List
 import Data.Function
@@ -10,7 +12,29 @@
 import qualified Data.Text as T
 
 prsVid :: T.Text -> [Video]
-prsVid = map (genVidInf . filter (not. T.null) . map getInf) .
+prsVid = sortVid .
+         map (genVid . filter (not . T.null) . map pullText) .
+         filter isVidLn . map parseTags . T.lines
+    where isVidLn = any isVidLnk
+          isVidLnk tg
+            | isTagOpen tg = any (`T.isSuffixOf` fromAttrib "href" tg) fmts
+            | otherwise = False
+          pullText tg
+            | isTagOpen tg = fromAttrib "href" tg
+            | isTagText tg = fromTagText tg
+            | otherwise = ""
+          genVid [lnk, _, tx] = Video {vidLink = lnk, vidName = nm, vidDate = dt, vidSize = sz}
+            where dt = T.intercalate " " . take 2 $ T.words tx
+                  sz = T.pack . hsz . read . last . words . T.unpack $ tx
+                  hsz :: Int -> String
+                  hsz i = show (i `div` (1024*1024)) ++ "M"
+                  nm = genName lnk
+          genVid _ = Video "Parse Fail" "" "" ""
+          fmts = [".mp4", ".avi", ".mkv"]
+
+
+{-
+         map (genVidInf . filter (not. T.null) . map getInf) .
          filter isVideoLine . 
          map parseTags . T.lines
     where isVideoLine = any isNameTag
@@ -20,22 +44,18 @@
           isLinkTag tg
             | isTagOpen tg = not. T.null $ fromAttrib "href" tg
             | otherwise = False
-          isSizeTag tg
-            | isTagText tg = any (`T.isSuffixOf` fromTagText tg) ["K", "M", "G"]
-            | otherwise = False
-          isDateTag tg
+          isDtSzTag tg
             | isTagText tg = all (`T.isInfixOf` fromTagText tg)  ["-", ":"]
             | otherwise = False
           getInf tg
             | isNameTag tg = fromTagText tg
             | isLinkTag tg = fromAttrib "href" tg
-            | isSizeTag tg = fromTagText tg
-            | isDateTag tg = fromTagText tg
+            | isDtSzTag tg = $ fromTagText tg
             | otherwise = ""
           genVidInf [lnk, nm, dt, sz] = Video {vidLink = lnk, vidName = nm, vidDate = dt, vidSize = sz}  
-          getVidInf _ = Video {vidLink = T.empty, vidName = "parse error", vidDate = "", vidSize = ""}
+          genVidInf _ = Video {vidLink = T.empty, vidName = "parse error", vidDate = "", vidSize = ""}
           vdfmt = [".avi", ".mp4", ".mkv"]
 
 
 
-
+-}
diff --git a/src/SortVid.hs b/src/SortVid.hs
new file mode 100644
--- /dev/null
+++ b/src/SortVid.hs
@@ -0,0 +1,33 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module SortVid (sortVid) where
+
+import Video
+
+import qualified Data.Text as T
+import Data.List
+import Data.Function
+
+sortVid :: [Video] -> [Video]
+sortVid = sortBy (cmpDate `on` vidDate)
+
+cmpDate :: T.Text -> T.Text -> Ordering
+cmpDate = flip compare `on` prs
+    where prs tx = [year, tranMon mon, day, time] 
+            where [day, mon, year, time] = concat . map (T.splitOn "-") . (T.splitOn " ") $ tx
+          
+tranMon :: T.Text -> T.Text
+tranMon m = case m of
+    "Jan" -> "A"
+    "Feb" -> "B"
+    "Mar" -> "C"
+    "Apr" -> "D"
+    "May" -> "E"
+    "Jun" -> "F"
+    "Jul" -> "G"
+    "Aug" -> "H"
+    "Sep" -> "I"
+    "Oct" -> "J"
+    "Nov" -> "K"
+    "Dec" -> "L"
+
