diff --git a/mp.cabal b/mp.cabal
--- a/mp.cabal
+++ b/mp.cabal
@@ -1,5 +1,5 @@
 name:               mp
-version:            0.2.1
+version:            0.2.2
 cabal-version:      >=1.16
 build-type:         Simple
 author:             Piotr Borek <piotrborek@op.pl>
diff --git a/src/Mp/Player/Server.hs b/src/Mp/Player/Server.hs
--- a/src/Mp/Player/Server.hs
+++ b/src/Mp/Player/Server.hs
@@ -58,10 +58,10 @@
     state <- readMVar serverState
     encodeFile (cfgDir </> "server.state") state
 
-saveServerIndex :: ServerState -> IO ()
-saveServerIndex state = do
+saveServerIndex :: Int -> IO ()
+saveServerIndex index = do
     cfgDir <- configDirFilePath
-    encodeFile (cfgDir </> "server.index") (PlayingIndex $ getPlaying state)
+    encodeFile (cfgDir </> "server.index") (PlayingIndex index)
 
 startServerBlocking :: String -> IO ()
 startServerBlocking socName = do
@@ -138,8 +138,6 @@
         let list = getPlaylist st
         let index = indexFunction $ getPlaying st
 
-        when (and [index >= 0, index < length list]) $ saveServerIndex st
-
         if and [index >= 0, index < length list]
             then
                 modifyPlayerPlay st player index
@@ -157,6 +155,7 @@
 
 modifyPlayerStop :: ServerState -> GstPlayer -> IO ServerState
 modifyPlayerStop st player = do
+    saveServerIndex 0
     gstPlayerStop player
     return st {
         getCurrentPosition = 0,
@@ -167,6 +166,7 @@
 
 modifyPlayerPlay :: ServerState -> GstPlayer -> Int -> IO ServerState
 modifyPlayerPlay st player index = do
+    saveServerIndex index
     let list = getPlaylist st
     let (f, d) = if isShuffleMode st then
                      State.runState shuffleFunction $ shuffleData st
