diff -ru --exclude Makefile mp3-0.8.2.orig/menu.c mp3-0.8.2/menu.c
--- mp3-0.8.2.orig/menu.c	Wed Dec 11 19:17:30 2002
+++ mp3-0.8.2/menu.c	Tue Feb  3 13:24:39 2004
@@ -113,9 +113,11 @@
 
   cDirItem *item=list->First();
   while(item) {
-    Add(new cMenuBrowseItem(item),(parent && !strcmp(item->Name,parent)));
-    item=list->Next(item);
+    if (item->Name[0] != '.') {
+      Add(new cMenuBrowseItem(item),(parent && !strcmp(item->Name,parent)));
     }
+    item=list->Next(item);
+  }
   return true;
 }
 
diff -ru --exclude Makefile mp3-0.8.2.orig/player-mplayer.c mp3-0.8.2/player-mplayer.c
--- mp3-0.8.2.orig/player-mplayer.c	Sun Nov 16 12:31:14 2003
+++ mp3-0.8.2/player-mplayer.c	Tue Feb  3 19:59:45 2004
@@ -187,6 +187,51 @@
   return true;
 }
 
+void MakeStoreFilename(const char* filename, char* storefile) {
+  // find the last slash in filename
+  unsigned int slash_pos(0);
+  for (unsigned int pos = 0; pos < strlen(filename); pos++) {
+    if ('/' == filename[pos]) {
+      slash_pos = pos+1;
+    }
+  }
+  // copy the directory (all intil the last slash inclusive
+  memcpy(storefile, filename, slash_pos);
+  // make a dot
+  storefile[slash_pos] = '.';
+  strcpy(storefile+slash_pos+1, filename+slash_pos);
+}
+
+const float GetStoredOldPosition(const char* file) {
+  float old_pos = 0.0;
+  char* storefilename = new char[strlen(file)+1];
+  MakeStoreFilename(file, storefilename);
+  FILE* storefile = fopen(storefilename, "r");
+  if (NULL != storefile) {
+    if (fscanf(storefile, "old_position=%f", &old_pos) != 1) {
+      // not exactly one item assigned -> read error
+      fprintf(stderr, "Parse error on storefile\n");
+      old_pos = 0.0;
+    }
+    fclose(storefile);
+  }
+  delete[] storefilename;
+  return old_pos;
+}
+
+void StoreCurrentPosition(const char* file, const float pos) {
+  char* storefilename = new char[strlen(file)+1];
+  MakeStoreFilename(file, storefilename);
+  FILE* storefile = fopen(storefilename, "w+");
+  if (NULL != storefile) {
+    fprintf(storefile, "old_position=%f\n", pos);
+    fclose(storefile);
+  } else {
+    fprintf(stderr, "Could not open storefile for writing\n");
+  }
+  delete[] storefilename;
+}
+
 #define BSIZE    1024
 #define TIME_INT 10
 #define POS_INT  1
@@ -204,6 +249,8 @@
   char buff[BSIZE+2]; // additional space for fake newline
   int c=0;
   bool force=true, slavePatch=false, trustedTotal=false, playBack=false;
+  bool firstLoop = true;
+  float current_pos = 0.0;
   while(run) {
     if(playMode==pmPlay && playBack) {
       int t=time(0);
@@ -251,6 +298,7 @@
             if(itime>0 && total>=0) index=total*itime/100;
             }
           else if(sscanf(buff,"SLAVE: time=%f position=%f",&ftime,&fpos)==2) {
+            current_pos = fpos;
             const float fr=(float)SecondsToFrames(1);
             itime=(int)(ftime*fr);
             if(saveIndex<0 || itime>saveIndex) { // prevent index jump-back
@@ -259,6 +307,13 @@
               //printf("buff=%s index=%d total=%d\n",buff,index,total);
               }
             slavePatch=playBack=true;
+            if (firstLoop) {
+              firstLoop = false;
+              float old_position = GetStoredOldPosition(filename);
+              if (old_position != 0.0) {
+                MPlayerControl("seek %f 1", old_position);
+              }
+            }
             }
 #ifdef DEBUG
           else printf("%s%c",buff,cc);
@@ -271,6 +326,10 @@
     SetMPlayerVolume(index>=0 && force);
     force=false;
     }
+
+  if (current_pos != 0.0) {
+    StoreCurrentPosition(filename, current_pos);
+  }
 
   dsyslog("mplayer: player thread ended (pid=%d)", getpid());
 }

