diff -Nru muggle-0.0.8-orig/vdr_player.c muggle-0.0.8/vdr_player.c
--- muggle-0.0.8-orig/vdr_player.c	2004-12-03 18:41:22.003575744 +0100
+++ muggle-0.0.8/vdr_player.c	2004-12-03 18:41:13.871811960 +0100
@@ -17,6 +17,7 @@
 #include <ctype.h>
 #include <stdlib.h>
 #include <stdio.h>
+#include <vdr/plugin.h>
 #include <errno.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
@@ -194,6 +195,9 @@
   void Play();
   void Forward();
   void Backward();
+  char *GetCover(const char *fullname);
+  bool TransferCover(const char *coverName);
+
 
   void Goto(int Index, bool Still=false);
   void SkipSeconds(int secs);
@@ -326,6 +330,55 @@
     }
 }
 
+char * mgPCMPlayer::GetCover(const char *fullname)
+{
+	static char imageFile[1024];
+	char *result = NULL;
+	FILE *fp;
+
+	printf("cov: checking %s for specific cover\n", fullname);
+	strcpy (imageFile, fullname);
+
+	strcpy (strrchr (imageFile, '.'), ".jpg");
+	if ((fp=fopen(imageFile, "rb")))
+	{
+		// found specific cover
+		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;
+			printf("cov: cover file Cover.jpg found\n" );
+		} else {
+			printf("cov: no cover found\n" );
+		}
+	}
+	return result;
+}
+
+bool mgPCMPlayer::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;
+}
+
+
 void mgPCMPlayer::Action(void)
 {
   MGLOG( "mgPCMPlayer::Action" );
@@ -335,6 +388,7 @@
   cResample resample[2];
   unsigned int nsamples[2];
   const mad_fixed_t *data[2];
+  const char *coverName=0;
   cScale scale;
   cLevel level;
   cNormalize norm;
@@ -388,6 +442,16 @@
 		    {
 		      std::string filename = m_playing->getSourceFile();
 		      // mgDebug( 1, "mgPCMPlayer::Action: music file is %s", filename.c_str() );
+				coverName=GetCover(filename.c_str());
+				if(coverName) {
+					// if a cover exist, copy it to the /tmp directory
+					if(TransferCover(coverName)){
+						printf("cov: found and transfered to grapftft: %s \n",coverName );
+					} else {
+						printf("cov: no cover transfered.\n" );
+					}
+				}
+
         
 		      if( ( m_decoder = mgDecoders::findDecoder( m_playing ) ) && m_decoder->start() )
 		      {

