diff --git a/media_sitemap.module b/media_sitemap.module
index de04a1e..9e22b81 100644
--- a/media_sitemap.module
+++ b/media_sitemap.module
@@ -58,29 +58,37 @@ function media_sitemap_menu() {
  * Custom function for generating the sitemap.
  */
 function _media_sitemap_generate(&$context) {
-  $query = db_select('file_managed', 'file');
-  $query->fields('file', array('fid', 'filename', 'uri'));
-  $query->condition('file.type', array('image'));
-  $query->orderBy('file.timestamp', 'DESC');
-  $files = $query->execute()->fetchAll();
+  $query = db_select('file_usage', 'fu');
+  $query->fields('fu', array('id'));
+  $nids = $query->distinct()->execute()->fetchAll();
+  $output = '';
   $total_urls = 0;
-  // Create only if images are found.
-  if (count($files) > 0) {
+  if (count($nids) > 0) {
     $output = '<?xml version="1.0" encoding="UTF-8"?>';
     $output .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
     xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">';
-    foreach ($files as $file) {
-      $media_title = _media_sitemap_get_title($file->fid);
-      if (!isset($media_title)) {
-        $media_title = _media_sitemap_format_title($file->filename);
+    foreach ($nids as $nid) {
+      // fetch list of media files for each nid.
+      $query = db_select('file_managed', 'fm');
+      $query->fields('fm', array('fid', 'filename', 'uri'));
+      $query->join('file_usage', 'fu', 'fu.fid = fm.fid');
+      $query->condition('fu.id', $nid->id);
+      $query->condition('fm.type', 'image');
+      $files = $query->execute()->fetchAll();
+
+      if (count($files) > 0) {
+        $output .= '<url><loc>' . url('node/' . $nid->id, array('absolute' => TRUE)) . '</loc>';
+        foreach ($files as $file) {
+          $media_title = _media_sitemap_get_title($file->fid);
+          if (!isset($media_title)) {
+            $media_title = _media_sitemap_format_title($file->filename);
+          }
+
+          $output .= '<image:image><image:loc>' . file_create_url($file->uri) . '</image:loc><image:title>' . $media_title . '</image:title><image:caption>' . check_plain($media_title) . '</image:caption></image:image>';
+        }
+        $output .= '</url>';
+        $total_urls++;
       }
-      $output .= '<url><loc>' . url('media/' . $file->fid, array('absolute' => TRUE)) . '</loc>
-      <image:image>
-      <image:loc>' . file_create_url($file->uri) . '</image:loc>
-      <image:title>' . $media_title . '</image:title>
-      <image:caption>' . check_plain($media_title) . '</image:caption>
-      </image:image></url>';
-      $total_urls++;
     }
     $output .= '</urlset>';
     // File build path.
@@ -89,6 +97,7 @@ function _media_sitemap_generate(&$context) {
       drupal_mkdir($path);
     }
   }
+
   $time = time();
   $filename = 'image_sitemap.xml';
   if ($file = file_unmanaged_save_data($output, $path . '/' . $filename, FILE_EXISTS_REPLACE)) {
