diff --git a/sickbeard/metadata/kodi_12plus.py b/sickbeard/metadata/kodi_12plus.py
index 4014b8144db2c3432538c278e686f0a318807635..4ba5ceb762fa195d01e1d7e50e9cc534e902c810 100644
--- a/sickbeard/metadata/kodi_12plus.py
+++ b/sickbeard/metadata/kodi_12plus.py
@@ -17,7 +17,9 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
+import re
 import datetime
+from babelfish import Country
 
 import sickbeard
 from sickbeard.metadata import generic
@@ -91,6 +93,10 @@ class KODI_12PlusMetadata(generic.GenericMetadata):
         self.eg_season_all_poster = "season-all-poster.jpg"
         self.eg_season_all_banner = "season-all-banner.jpg"
 
+    @staticmethod
+    def _split_info(info_string):
+        return {x.strip().title() for x in re.sub(r'[,/]+', '|', info_string).split('|') if x.strip()}
+
     def _show_data(self, show_obj):
         """
         Creates an elementTree XML structure for an KODI-style tvshow.nfo and
@@ -169,8 +175,19 @@ class KODI_12PlusMetadata(generic.GenericMetadata):
             indexerid.text = str(myShow["id"])
 
         if getattr(myShow, 'genre', None) and isinstance(myShow["genre"], basestring):
-            genre = etree.SubElement(tv_node, "genre")
-            genre.text = " / ".join(x.strip() for x in myShow["genre"].split('|') if x.strip())
+            for genre in self._split_info(myShow["genre"]):
+                cur_genre = etree.SubElement(tv_node, "genre")
+                cur_genre.text = genre
+
+        if 'country_codes' in show_obj.imdb_info:
+            for country in self._split_info(show_obj.imdb_info['country_codes']):
+                try:
+                    cur_country_name = Country(country.upper()).name.title()
+                except Exception:
+                    continue
+
+                cur_country = etree.SubElement(tv_node, "country")
+                cur_country.text = cur_country_name
 
         if getattr(myShow, 'firstaired', None):
             premiered = etree.SubElement(tv_node, "premiered")
@@ -180,6 +197,16 @@ class KODI_12PlusMetadata(generic.GenericMetadata):
             studio = etree.SubElement(tv_node, "studio")
             studio.text = myShow["network"].strip()
 
+        if getattr(myShow, 'writer', None) and isinstance(myShow['writer'], basestring):
+            for writer in self._split_info(myShow['writer']):
+                cur_writer = etree.SubElement(tv_node, "credits")
+                cur_writer.text = writer
+
+        if getattr(myShow, 'director', None) and isinstance(myShow['director'], basestring):
+            for director in self._split_info(myShow['director']):
+                cur_director = etree.SubElement(tv_node, "director")
+                cur_director.text = director
+
         if getattr(myShow, '_actors', None):
             for actor in myShow['_actors']:
                 cur_actor = etree.SubElement(tv_node, "actor")
@@ -310,20 +337,23 @@ class KODI_12PlusMetadata(generic.GenericMetadata):
             # watched = etree.SubElement(episode, "watched")
             # watched.text = 'false'
 
-            if getattr(myEp, 'writer', None):
-                ep_credits = etree.SubElement(episode, "credits")
-                ep_credits.text = myEp['writer'].strip()
-
-            if getattr(myEp, 'director', None):
-                director = etree.SubElement(episode, "director")
-                director.text = myEp['director'].strip()
-
             if getattr(myEp, 'rating', None):
                 rating = etree.SubElement(episode, "rating")
                 rating.text = myEp['rating']
 
+
+            if getattr(myEp, 'writer', None) and isinstance(myEp['writer'], basestring):
+                for writer in self._split_info(myEp['writer']):
+                    cur_writer = etree.SubElement(episode, "credits")
+                    cur_writer.text = writer
+
+            if getattr(myEp, 'director', None) and isinstance(myEp['director'], basestring):
+                for director in self._split_info(myEp['director']):
+                    cur_director = etree.SubElement(episode, "director")
+                    cur_director.text = director
+
             if getattr(myEp, 'gueststars', None) and isinstance(myEp['gueststars'], basestring):
-                for actor in (x.strip() for x in myEp['gueststars'].split('|') if x.strip()):
+                for actor in self._split_info(myEp['gueststars']):
                     cur_actor = etree.SubElement(episode, "actor")
                     cur_actor_name = etree.SubElement(cur_actor, "name")
                     cur_actor_name.text = actor