diff -Nru mp3-0.9.11-orig/data-mp3.h mp3-0.9.11/data-mp3.h
--- mp3-0.9.11-orig/data-mp3.h	2005-02-11 18:00:08.000000000 +0100
+++ mp3-0.9.11/data-mp3.h	2005-02-20 16:42:12.918899368 +0100
@@ -64,6 +64,7 @@
   cDecoder *Decoder(void);
   bool Image(unsigned char * &mem, int &len);
   inline const char *Name(void) const { return obj->Name(); }
+  inline const char *Fullname(void) { return obj->FullPath (); }
   };
 
 // ----------------------------------------------------------------
diff -Nru mp3-0.9.11-orig/player-mp3.c mp3-0.9.11/player-mp3.c
--- mp3-0.9.11-orig/player-mp3.c	2005-02-17 18:38:04.000000000 +0100
+++ mp3-0.9.11/player-mp3.c	2005-02-20 16:42:12.922898760 +0100
@@ -21,6 +21,7 @@
 
 #include <stdlib.h>
 #include <stdio.h>
+#include <vdr/plugin.h>
 #include <sys/ioctl.h>
 #include <math.h>
 #ifdef WITH_OSS
@@ -1544,6 +1545,7 @@
   cNormalize norm;
   bool haslevel=false;
   const unsigned char *p=0;
+  const char *coverName=0;
   int pc=0, readindex=0;
   bool imageValid=true;
   int imageCheck=0;
@@ -1660,6 +1662,16 @@
                 if(si->HasInfo())
                   total=SecondsToFrames(si->Total);
                 }
+					 coverName=GetCover(playing->Fullname());
+					 if(coverName) {
+						 // if a cover exist, copy it to the /tmp directory
+						 if(TransferCover(coverName)){
+							 d(printf("cov: found and transfered to grapftft: %s \n",coverName ))
+						 } else {
+							 d(printf("cov: no cover transfered.\n" ))
+						 }
+					 }
+
               d(printf("mp3: isStream=%d levelgood=%d haslevel=%d\n",isStream,levelgood,haslevel))
               out->Init();
               level.Init();
@@ -1940,3 +1952,52 @@
   Speed=-1;
   return true;
 }
+
+
+char *cMP3Player::GetCover(const char *fullname)
+{
+  static char imageFile[1024];
+  char *result = NULL;
+  FILE *fp;
+
+  d(printf("cov: checking %s for specific cover\n", basename(fullname)))
+  strcpy (imageFile, fullname);
+
+  strcpy (strrchr (imageFile, '.'), ".jpg");
+  if ((fp=fopen(imageFile, "rb")))
+  {
+    // found specific cover
+   d(printf("cov: specific cover file %s found\n", basename(imageFile)))
+    fclose (fp);
+    result = imageFile;
+  }
+  else
+  {
+    strcpy (strrchr (imageFile, '/'), "/Cover.jpg");
+    if ((fp = fopen (imageFile, "rb")))
+    {
+      fclose (fp);
+      result = imageFile;
+      d(printf("cov: cover file Cover.jpg found\n" ))
+    } else {
+      d(printf("cov: no cover found\n" ))
+   }
+  }
+  return result;
+}
+
+bool cMP3Player::TransferCover(const char *coverName)
+{
+  int ret = false;
+  cPlugin * graphtft = cPluginManager::GetPlugin("graphtft");
+
+  if( graphtft ) {
+    graphtft->SetupParse("CoverImage", coverName);
+    ret = true;
+
+  } else {
+    ret = false;
+  }
+  return ret;
+}
+
diff -Nru mp3-0.9.11-orig/player-mp3.h mp3-0.9.11/player-mp3.h
--- mp3-0.9.11-orig/player-mp3.h	2005-02-11 16:36:24.000000000 +0100
+++ mp3-0.9.11/player-mp3.h	2005-02-20 16:42:12.923898608 +0100
@@ -134,6 +134,9 @@
   virtual bool GetReplayMode(bool &Play, bool &Forward, int &Speed);
   bool Active(void) { return active; }
   bool IsStream(void) { return isStream; }
+  char *GetCover(const char *maskFilename);
+  bool TransferCover(const char *coverName);
+
   };
 
 #endif //___DVB_MP3_H

