diff --git release/project-release-create-history.php release/project-release-create-history.php
index 29ae3fe..933f28e 100755
--- release/project-release-create-history.php
+++ release/project-release-create-history.php
@@ -271,14 +271,9 @@ function project_release_history_generate_project_xml($project_nid, $api_tid = N
   $joins = array();
   $where = array();
   $parameters = array();
-  // TODO: This is broken for N files per release node.
   $fields = array(
     'n.nid',
     'n.vid',
-    'f.filepath',
-    'f.filesize',
-    'f.timestamp',
-    'prf.filehash',
     'prn.rebuild',
     'prn.version',
     'prn.version_major',
@@ -291,8 +286,6 @@ function project_release_history_generate_project_xml($project_nid, $api_tid = N
   );
 
   $joins[] = "INNER JOIN {project_release_nodes} prn ON n.nid = prn.nid";
-  $joins[] = "INNER JOIN {project_release_file} prf ON n.nid = prf.nid";
-  $joins[] = "INNER JOIN {files} f ON prf.fid = f.fid";
   $where[] = "prn.pid = '%d'";
   $parameters[] = $project->nid;
 
@@ -341,12 +334,21 @@ function project_release_history_generate_project_xml($project_nid, $api_tid = N
         $xml .= "  <$vers_type>". check_plain($release->$vers_type) ."</$vers_type>\n";
       }
     }
+
+    // Need to fetch list of files for this release
+    $files_query = db_query("SELECT prf.filehash, f.filepath, f.filesize, f.timestamp FROM {project_release_file} prf INNER JOIN {files} f on prf.fid = f.fid WHERE prf.nid = %d ORDER BY prf.fid", $release->nid);
+
+    $files = array();
+    while ($file = db_fetch_object($files_query)) {
+      $files[] = $file;
+    }
+
     if ($release->status) {
       // Published, so we should include the links.
       $xml .= "  <status>published</status>\n";
       $xml .= '  <release_link>'. prch_url("node/$release->nid") ."</release_link>\n";
-      if (!empty($release->filepath)) {
-        $download_link = theme('project_release_download_link', $release->filepath, NULL, TRUE);
+      if (!empty($files[0]->filepath)) {
+        $download_link = theme('project_release_download_link', $files[0]->filepath, NULL, TRUE);
         $xml .= '  <download_link>'. $download_link['href'] ."</download_link>\n";
       }
     }
@@ -354,15 +356,36 @@ function project_release_history_generate_project_xml($project_nid, $api_tid = N
       $xml .= "  <status>unpublished</status>\n";
     }
     // We want to include the rest of these regardless of the status.
-    if (!empty($release->timestamp)) {
-      $xml .= '  <date>'. check_plain($release->timestamp) ."</date>\n";
+    if (!empty($files[0]->timestamp)) {
+      $xml .= '  <date>'. check_plain($files[0]->timestamp) ."</date>\n";
     }
-    if (!empty($release->filehash)) {
-      $xml .= '  <mdhash>'. check_plain($release->filehash) ."</mdhash>\n";
+    if (!empty($files[0]->filehash)) {
+      $xml .= '  <mdhash>'. check_plain($files[0]->filehash) ."</mdhash>\n";
     }
-    if (isset($release->filesize)) {
-      $xml .= '  <filesize>'. check_plain($release->filesize) ."</filesize>\n";
+    if (isset($files[0]->filesize)) {
+      $xml .= '  <filesize>'. check_plain($files[0]->filesize) ."</filesize>\n";
     }
+
+    $xml .= "  <files>\n";
+    foreach ($files as $file) {
+      $xml .= "   <file>\n";
+      if ($release->status && !empty($file->filepath)) {
+        $download_link = theme('project_release_download_link', $file->filepath, NULL, TRUE);
+        $xml .= '    <url>'. $download_link['href'] ."</url>\n";
+      }
+      if (!empty($file->filehash)) {
+        $xml .= '    <mdhash>'. check_plain($file->filehash) ."</mdhash>\n";
+      }
+      if (isset($file->filesize)) {
+        $xml .= '    <filesize>'. check_plain($file->filesize) ."</filesize>\n";
+      }
+      if (!empty($file->timestamp)) {
+        $xml .= '    <filedate>'. check_plain($file->timestamp) ."</filedate>\n";
+      }
+      $xml .= "   </file>\n";
+    }
+    $xml .= "  </files>\n";
+
     $term_query = db_query("SELECT v.name AS vocab_name, v.vid, td.name AS term_name, td.tid FROM {term_node} tn INNER JOIN {term_data} td ON tn.tid = td.tid INNER JOIN {vocabulary} v ON td.vid = v.vid WHERE tn.vid = %d AND v.vid != %d", $release->vid, $api_vid);
     $xml_terms = '';
     while ($term = db_fetch_object($term_query)) {
