--- a/src/filters/rclaudio
+++ b/src/filters/rclaudio
@@ -164,6 +164,13 @@
     '\xa9wrt' : 'COMPOSER',
     }
 
+def tobytes(s):
+    if type(s) == type(b''):
+        return s
+    if type(s) != type(u''):
+        s = str(s)
+    return s.encode('utf-8', errors='replace')
+    
 # mp3:      album, title, artist, genre, date, tracknumber
 # flac:     album, title, artist, genre, xxx, tracknumber
 # oggvorbis:album, title, artist, genre, date, tracknumber
@@ -276,30 +283,29 @@
                 minf['bits_per_sample'] = 16
 
         for tag,val in minf.items():
-            val = str(val)
-            if type(val) == type(u''):
-                val = val.encode('utf-8', errors='replace')
-            minf[tag] = val
+            minf[tag] = tobytes(val)
             
         ####################
         # Metadata tags. The names vary depending on the file type. We
         # just have a big translation dictionary for all
         for tag,val in mutf.items():
-            #self.em.rclog("Original tag: <%s>, val <%s>" % (tag, val))
             if tag.upper() in tagdict:
                 tag = tag.upper()
             if tag in tagdict:
+                #self.em.rclog("Original tag: <%s>, type0 %s val <%s>" %
+                #              (tag, type(val), val))
+                # Some file types return lists of value (e.g. FLAC)
+                try:
+                    val = " ".join(val)
+                    #self.em.rclog("Joined tag: <%s>, type0 %s val <%s>" %
+                    #              (tag, type(val), val))
+                except:
+                    pass
                 ntag = tagdict[tag].lower()
                 #self.em.rclog("New tag: %s" % ntag)
                 try:
-                    if type(val) == type(u''):
-                        val = val.encode('utf-8', errors='replace')
-                    elif type(val) != type(b''):
-                        val = str(val)
-                        if type(val) == type(u''):
-                            val = val.encode('utf-8', errors='replace')
-                    minf[ntag] = val
-                    #self.em.rclog("Tag %s -> %s" % (ntag, val0))
+                    minf[ntag] = tobytes(val)
+                    #self.em.rclog("Tag %s -> %s" % (ntag, val))
                 except Exception as err:
                     self.em.rclog("Error while extracting tag: %s"%err)
             else:
@@ -340,10 +346,7 @@
         embdimg = self._embeddedImageFormat(mutf)
         if embdimg:
             #self.em.rclog("Embedded image format: %s" % embdimg)
-            if type(embdimg) == type(u''):
-                minf["embdimg"] = embdimg.encode('ascii', errors='replace')
-            else:
-                minf["embdimg"] = embdimg
+            embdimg = tobytes(embdimg)
         
         self.em.setmimetype("text/plain")
         self.em.setfield("charset", 'utf-8')
@@ -356,7 +359,7 @@
                 self.em.setfield('author', val)    
 
         try:
-            docdata = mutf.pprint().encode('utf-8', errors='replace')
+            docdata = tobytes(mutf.pprint())
         except Exception as err:
             self.em.rclog("Doc pprint error: %s" % err)