diff --git a/theme/views-data-export-xml-body.tpl.php b/theme/views-data-export-xml-body.tpl.php
index b97e8ad..ba20b72 100644
--- a/theme/views-data-export-xml-body.tpl.php
+++ b/theme/views-data-export-xml-body.tpl.php
@@ -14,7 +14,15 @@
 <?php foreach ($themed_rows as $count => $row): ?>
   <<?php print $item_node; ?>>
 <?php foreach ($row as $field => $content): ?>
-    <<?php print $xml_tag[$field]; ?>><?php print $content; ?></<?php print $xml_tag[$field]; ?>>
+  <?php if (in_array($field, $multiple_fields) && count($content) > 1): ?>
+    <<?php print $xml_tag[$field]; ?>>
+    <?php foreach ($content as $field_content): ?>
+      <<?php print $xml_item_tag; ?>><?php print $field_content; ?></<?php print $xml_item_tag; ?>>
+    <?php endforeach; ?>
+    </<?php print $xml_tag[$field]; ?>>
+  <?php else: ?>
+     <<?php print $xml_tag[$field]; ?>><?php print $content; ?></<?php print $xml_tag[$field]; ?>>
+  <?php endif; ?>
 <?php endforeach; ?>
   </<?php print $item_node; ?>>
 <?php endforeach; ?>
diff --git a/theme/views_data_export.theme.inc b/theme/views_data_export.theme.inc
index 8416d96..eece005 100644
--- a/theme/views_data_export.theme.inc
+++ b/theme/views_data_export.theme.inc
@@ -91,7 +91,7 @@ function template_preprocess_views_data_export_csv_header(&$vars) {
   }
   // Support old misspelled templates. LEGACY
   $vars['seperator'] =
-    $vars['separator'] = $vars['options']['separator'];
+  $vars['separator'] = $vars['options']['separator'];
 
   // Special handling when quoted values are involved.
   if ($vars['options']['quote']) {
@@ -136,7 +136,7 @@ function template_preprocess_views_data_export_csv_body(&$vars) {
   }
   // Support old misspelled templates. LEGACY
   $vars['seperator'] =
-    $vars['separator'] = $vars['options']['separator'];
+  $vars['separator'] = $vars['options']['separator'];
 
   // Special handling when quoted values are involved.
   if ($vars['options']['quote']) {
@@ -191,7 +191,7 @@ function template_preprocess_views_data_export_csv(&$vars) {
   }
   // Support old misspelled templates. LEGACY
   $vars['seperator'] =
-    $vars['separator'] = $vars['options']['separator'];
+  $vars['separator'] = $vars['options']['separator'];
 
   // Special handling when quoted values are involved.
   if ($vars['options']['quote']) {
@@ -383,29 +383,52 @@ function template_preprocess_views_data_export_xml_body(&$vars) {
 
   $vars['item_node'] = _views_data_export_xml_tag_clean($vars['options']['item_node']);
 
+  // Keep track of fields that contain multiple values
+  $vars['multiple_fields'] = array();
+
   foreach ($vars['themed_rows'] as $num => $row) {
     foreach ($row as $field => $content) {
-
       // Perform xml entity encoding unless excluded by style options.
-      if (empty($no_encode[$field]) && empty($cdata_wrapper[$field])) {
-
-        // Prevent double encoding of the ampersand. Look for the entities produced by check_plain().
-        $content = preg_replace('/&(?!(amp|quot|#039|lt|gt);)/', '&amp;', $content);
-        // Convert < and > to HTML entities.
-        $content = str_replace(
-          array('<', '>'),
-          array('&lt;', '&gt;'),
-          $content);
-      }
+      if (empty($no_encode[$field])) {
+        // Treat multi-valued fields differently in XML
+        $views_field_name = 'field_' . $field;
+
+        if (isset($vars['view']->result[$num]->$views_field_name)
+          && is_array($vars['view']->result[$num]->$views_field_name)
+          && count($vars['view']->result[$num]->$views_field_name) > 1
+        ) {
+          // Mark field as multiple if not already marked
+          if (!array_search($field, $vars['multiple_fields'])) {
+            $vars['multiple_fields'][] = $field;
+          }
+          $vars['themed_rows'][$num][$field] = array();
+          foreach ($vars['view']->result[$num]->$views_field_name as $field_num => $field_content) {
+            $vars['themed_rows'][$num][$field][$field_num] = $field_content['rendered']['#markup'];
+          }
+        }
 
-      // Perform wrapping the field data using the CDATA tag
-      // unless excluded by style options.
-      if (!empty($cdata_wrapper[$field])) {
+        // Cleanup all content contained in each field
+        if (is_array($vars['themed_rows'][$num][$field])) {
+          if (!empty($cdata_wrapper[$field])) {
+            array_walk($vars['themed_rows'][$num][$field], function(&$content) {
+              $content =  '<![CDATA[' . str_replace(']]>', ']]]]><![CDATA[>', $content) . ']]>';
+            });
+          } else {
+            array_walk($vars['themed_rows'][$num][$field], '_views_data_export_xml_content_clean');
+          }
+        }
+        else if (!empty($cdata_wrapper[$field])) {
+          // single field, enclose in CDATA
+          // Escape CDATA end sequence only.
+          $vars['themed_rows'][$num][$field] = '<![CDATA[' . str_replace(']]>', ']]]]><![CDATA[>', $content) . ']]>';
+        } else {
+          $vars['themed_rows'][$num][$field] = _views_data_export_xml_content_clean($content);
+        }
+      } else if (!empty($cdata_wrapper[$field])) {
+        // single field, enclose in CDATA
         // Escape CDATA end sequence only.
-        $content = '<![CDATA[' . str_replace(']]>', ']]]]><![CDATA[>', $content) . ']]>';
+        $vars['themed_rows'][$num][$field] = '<![CDATA[' . str_replace(']]>', ']]]]><![CDATA[>', $content) . ']]>';
       }
-
-      $vars['themed_rows'][$num][$field] = $content;
     }
   }
 
@@ -414,6 +437,7 @@ function template_preprocess_views_data_export_xml_body(&$vars) {
     if (empty($header)) {
       $header = 'no name';
     }
+    $vars['xml_item_tag'] = t('item');
     if ($vars['options']['transform']) {
       switch ($vars['options']['transform_type']) {
         case 'dash':
@@ -429,6 +453,7 @@ function template_preprocess_views_data_export_xml_body(&$vars) {
           break;
         case 'pascal':
           $vars['xml_tag'][$field] = str_replace(' ', '', ucwords(strtolower($header)));
+          $vars['xml_item_tag'] = drupal_ucfirst($vars['xml_item_tag']);
           break;
       }
     }
@@ -470,6 +495,26 @@ function _views_data_export_xml_tag_clean($tag) {
 }
 
 /**
+ * Returns valid XML content formed from the given input.
+ *
+ * @param $content The string that should be made into valid XML content.
+ * @return The valid XML tag or an empty string if the string contained o valid
+ * XML tag characters.
+ */
+function _views_data_export_xml_content_clean($content) {
+  // Prevent double encoding of the ampersand. Look for the entities produced by check_plain().
+  $content = preg_replace('/&(?!(amp|quot|#039|lt|gt);)/', '&amp;', $content);
+  // Convert < and > to HTML entities.
+  $content = str_replace(
+    array('<', '>'),
+    array('&lt;', '&gt;'),
+    $content);
+
+  return $content;
+}
+
+
+/**
  * Shared helper function for export preprocess functions.
  */
 function _views_data_export_header_shared_preprocess(&$vars) {
