diff --git feeds.module feeds.module
index ff3fc4d..9ce0ead 100644
--- feeds.module
+++ feeds.module
@@ -332,17 +332,25 @@ function feeds_theme() {
  *   Node object or FeedsImporter id.
  */
 function feeds_access($action, $param) {
+  $importer_ids = array();
+  
   if (is_string($param)) {
-    $importer_id = $param;
+    // If checking the access of a single importer build the array manually.
+    $importer_ids[$param] = $param;
   }
   elseif ($param->type) {
-    $importer_id = feeds_get_importer_id($param->type);
-  }
-
-  // Check for permissions if feed id is present, otherwise return FALSE.
-  if ($importer_id) {
-    if (user_access('administer feeds') || user_access($action .' '. $importer_id .' feeds')) {
-      return TRUE;
+    // If checking the access for a content type, check all importers available
+    // for it.
+    $importer_ids = feeds_get_importer_ids($param->type);
+  }
+  // Loop through all importers. if the user has access to one, they have access
+  // to the item.
+  foreach ($importer_ids as $importer_id){
+    // Check for permissions if feed id is present, otherwise return FALSE.
+    if ($importer_id) {
+      if (user_access('administer feeds') || user_access($action . ' ' . $importer_id .' feeds')) {
+        return TRUE;
+      }
     }
   }
   return FALSE;
@@ -413,10 +421,24 @@ function feeds_feeds_plugins() {
 }
 
 /**
+ * Implements hook_node_prepare().
+ */
+function feeds_node_prepare($node) {
+  if ($importer_ids = feeds_get_importer_ids($node->type)) {
+    $node->feeds = array();
+    foreach ($importer_ids as $importer_id){
+      $source = feeds_source($importer_id, empty($node->nid) ? 0 : $node->nid);
+      $node->feeds[$importer_id] = array();
+      $node->feeds[$importer_id] += $source->configDefaults();
+    }
+  }
+}
+
+/**
  * Implements hook_node_validate().
  */
 function feeds_node_validate($node, $form, &$form_state) {
-  if (!$importer_id = feeds_get_importer_id($node->type)) {
+  if (!$importer_ids = feeds_get_importer_ids($node->type)) {
     return;
   }
   // Keep a copy of the title for subsequent node creation stages.
@@ -428,25 +450,27 @@ function feeds_node_validate($node, $form, &$form_state) {
   // On validation stage we are working with a FeedsSource object that is
   // not tied to a nid - when creating a new node there is no
   // $node->nid at this stage.
-  $source = feeds_source($importer_id);
-
-  // Node module magically moved $form['feeds'] to $node->feeds :P.
-  // configFormValidate may modify $last_feed, smuggle it to update/insert stage
-  // through a static variable.
-  $last_feeds = $node->feeds;
-  $source->configFormValidate($last_feeds);
-
-  // If node title is empty, try to retrieve title from feed.
-  if (trim($node->title) == '') {
-    try {
-      $source->addConfig($last_feeds);
-      if (!$last_title = $source->preview()->title) {
-        throw new Exception();
+  foreach ($importer_ids as $importer_id) {
+    $source = feeds_source($importer_id);
+  
+    // Node module magically moved $form['feeds'] to $node->feeds :P.
+    // configFormValidate may modify $last_feed, smuggle it to update/insert stage
+    // through a static variable.
+    $last_feeds = $node->feeds;
+    $source->configFormValidate($last_feeds[$importer_id]);
+  
+    // If node title is empty, try to retrieve title from feed.
+    if (trim($node->title) == '') {
+      try {
+        $source->addConfig($last_feeds[$importer_id]);
+        if (!$last_title = $source->preview()->title) {
+          throw new Exception();
+        }
+      }
+      catch (Exception $e) {
+        drupal_set_message($e->getMessage(), 'error');
+        form_set_error('title', t('Could not retrieve title from feed.'), 'error');
       }
-    }
-    catch (Exception $e) {
-      drupal_set_message($e->getMessage(), 'error');
-      form_set_error('title', t('Could not retrieve title from feed.'), 'error');
     }
   }
 }
@@ -477,15 +501,17 @@ function feeds_node_insert($node) {
 
   // Source attached to node.
   feeds_node_update($node);
-  if ($importer_id = feeds_get_importer_id($node->type)) {
-    $source = feeds_source($importer_id, $node->nid);
-    // Start import if requested.
-    if (feeds_importer($importer_id)->config['import_on_create'] && !isset($node->feeds['suppress_import'])) {
-      $source->startImport();
+  if ($importer_ids = feeds_get_importer_ids($node->type)) {
+    foreach ($importer_ids as $importer_id) {
+      $source = feeds_source($importer_id, $node->nid);
+      // Start import if requested.
+      if (feeds_importer($importer_id)->config['import_on_create'] && !isset($node->feeds['suppress_import'])) {
+        $source->startImport();
+      }
+      // Schedule source and importer.
+      $source->schedule();
+      feeds_importer($importer_id)->schedule();
     }
-    // Schedule source and importer.
-    $source->schedule();
-    feeds_importer($importer_id)->schedule();
   }
 }
 
@@ -497,10 +523,12 @@ function feeds_node_update($node) {
   feeds_item_info_save($node, $node->nid);
 
   // Source attached to node.
-  if ($importer_id = feeds_get_importer_id($node->type)) {
-    $source = feeds_source($importer_id, $node->nid);
-    $source->addConfig($node->feeds);
-    $source->save();
+  if ($importer_ids = feeds_get_importer_ids($node->type)) {
+    foreach ($importer_ids as $importer_id) {
+      $source = feeds_source($importer_id, $node->nid);
+      $source->addConfig($node->feeds[$importer_id]);
+      $source->save();
+    }
   }
 }
 
@@ -517,8 +545,11 @@ function feeds_node_delete($node) {
   // Make sure we don't leave any orphans behind: Do not use
   // feeds_get_importer_id() to determine importer id as the importer may have
   // been deleted.
-  if ($importer_id = db_query("SELECT id FROM {feeds_source} WHERE feed_nid = :nid", array(':nid' => $node->nid))->fetchField()) {
-    feeds_source($importer_id, $node->nid)->delete();
+  if ($importer_ids = db_query("SELECT id FROM {feeds_source} WHERE feed_nid = :nid", array(':nid' => $node->nid))->execute()) {
+    foreach ($importer_ids as $row) {
+      feeds_source($row->id, $node->nid)->delete();
+    }
+    
   }
 }
 
@@ -575,21 +606,26 @@ function feeds_user_delete($account) {
  */
 function feeds_form_alter(&$form, $form_state, $form_id) {
   if (!empty($form['#node_edit_form'])) {
-    if ($importer_id = feeds_get_importer_id($form['type']['#value'])) {
+    if ($importer_ids = feeds_get_importer_ids($form['type']['#value'])) {
       // Set title to not required, try to retrieve it from feed.
       $form['title']['#required'] = FALSE;
       // Enable uploads.
       $form['#attributes']['enctype'] = 'multipart/form-data';
 
       // Build form.
-      $source = feeds_source($importer_id, empty($form['nid']['#value']) ? 0 : $form['nid']['#value']);
       $form['feeds'] = array(
         '#type' => 'fieldset',
         '#title' => t('Feed'),
         '#tree' => TRUE,
       );
-      $form['feeds'] += $source->configForm($form_state);
-      $form['#feed_id'] = $importer_id;
+      foreach ($importer_ids as $importer_id) {
+        $source = feeds_source($importer_id, empty($form['nid']['#value']) ? 0 : $form['nid']['#value']);
+        $form['feeds'][$importer_id] = $source->configForm($form_state);
+        foreach (element_children($form['feeds'][$importer_id]) as $type) {
+          $form['feeds'][$importer_id][$type]['source']['#title'] = $source->importer->config['name'];
+        }
+        $form['#feed_ids'][] = $importer_id;
+      }
     }
   }
 }
@@ -655,6 +691,37 @@ function feeds_get_importer_id($content_type) {
 }
 
 /**
+ * Gets an enabled importer configuration by content type.
+ *
+ * @param $content_type
+ *   A node type string.
+ *
+ * @return
+ *   A list of FeedsImporters attached to the given content type.
+ */
+function feeds_get_importer_ids($content_type) {
+  $all_importers = _feeds_importer_digest();
+  foreach ($all_importers as $importer => $type){
+    if ($type == $content_type){
+      $importers[$importer] = $importer;
+    }
+  }
+  return isset($importers) ? $importers : array();
+}
+
+function feeds_get_importer_weights($importers, $sorted = TRUE){
+  foreach (feeds_importer_load_all() as $importer) {
+    if (isset($importers[$importer->id])) {
+      $importer_weights[$importer->id] = isset($importer->config['weight']) ? $importer->config['weight'] : '0';
+    }
+  }
+  if ($sorted) {
+    asort($importer_weights);
+  }
+  return $importer_weights;
+}
+
+/**
  * Helper function for feeds_get_importer_id() and feeds_enabled_importers().
  */
 function _feeds_importer_digest() {
diff --git feeds.pages.inc feeds.pages.inc
index 87f3ee6..7c5c0f3 100644
--- feeds.pages.inc
+++ feeds.pages.inc
@@ -63,7 +63,8 @@ function feeds_import_form($form, &$form_state, $importer_id) {
     '#title' => t('Import'),
     '#tree' => TRUE,
   );
-  $form['feeds'] += $source->configForm($form_state);
+  $form['feeds'][$importer_id] = array();
+  $form['feeds'][$importer_id] += $source->configForm($form_state);
   $form['submit'] = array(
     '#type' => 'submit',
     '#value' => t('Import'),
@@ -92,7 +93,7 @@ function feeds_import_form_submit($form, &$form_state) {
 
   // Save source and import.
   $source = feeds_source($form['#importer_id']);
-  $source->addConfig($form_state['values']['feeds']);
+  $source->addConfig($form_state['values']['feeds'][$form['#importer_id']]);
   $source->save();
 
   // Refresh feed if import on create is selected.
@@ -109,26 +110,37 @@ function feeds_import_form_submit($form, &$form_state) {
  * Render a feeds import form on node/id/import pages.
  */
 function feeds_import_tab_form($form, &$form_state, $node) {
-  $importer_id = feeds_get_importer_id($node->type);
-  $source = feeds_source($importer_id, $node->nid);
+  $total_progress = 0;
+  
+  $importer_ids = feeds_get_importer_ids($node->type);
+  $importer_ids = feeds_get_importer_weights($importer_ids);
 
   $form = array();
   $form['#feed_nid'] = $node->nid;
-  $form['#importer_id'] = $importer_id;
   $form['#redirect'] = 'node/'. $node->nid;
-  $form['source_status'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Status'),
-    '#tree' => TRUE,
-    '#value' => feeds_source_status($source),
-  );
   $form = confirm_form($form, t('Import all content from source?'), 'node/'. $node->nid, '', t('Import'), t('Cancel'), 'confirm feeds update');
-  $progress = $source->progressImporting();
-  if ($progress !== FEEDS_BATCH_COMPLETE) {
-    $form['actions']['submit']['#disabled'] = TRUE;
-    $form['actions']['submit']['#value'] =
-      t('Importing (@progress %)', array('@progress' => number_format(100 * $progress, 0)));
+  foreach($importer_ids as $importer_id => $weight){
+    $form['#importer_ids'][] = $importer_id;
+    $source = feeds_source($importer_id, $node->nid);
+    $form[$importer_id]['source_status'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Status'),
+      '#tree' => TRUE,
+      '#value' => feeds_source_status($source),
+    );
+    $progress = $source->progressImporting();
+    $total_progress += $progress; 
   }
+  
+  if (count($importer_ids)) {
+    $progress = $total_progress / count($importer_ids);
+    if ($progress !== FEEDS_BATCH_COMPLETE) {
+      $form['actions']['submit']['#disabled'] = TRUE;
+      $form['actions']['submit']['#value'] =
+        t('Importing (@progress %)', array('@progress' => number_format(100 * $progress, 0)));
+    }
+  }
+
   return $form;
 }
 
@@ -137,7 +149,9 @@ function feeds_import_tab_form($form, &$form_state, $node) {
  */
 function feeds_import_tab_form_submit($form, &$form_state) {
   $form_state['redirect'] = $form['#redirect'];
-  feeds_source($form['#importer_id'], $form['#feed_nid'])->startImport();
+  foreach ($form['#importer_ids'] as $importer_id) {
+    feeds_source($importer_id, $form['#feed_nid'])->startImport();
+  }
 }
 
 /**
@@ -147,30 +161,40 @@ function feeds_import_tab_form_submit($form, &$form_state) {
  * Therefore $node may be missing.
  */
 function feeds_delete_tab_form($form, &$form_state, $importer_id, $node = NULL) {
+  $total_progress = 0;
+  
   if (empty($node)) {
     $source = feeds_source($importer_id);
     $form['#redirect'] = 'import/' . $source->id;
+    $importer_ids = array($importer_id);
   }
   else {
-    $importer_id = feeds_get_importer_id($node->type);
-    $source = feeds_source($importer_id, $node->nid);
-    $form['#redirect'] = 'node/' . $source->feed_nid;
+    $importer_ids = feeds_get_importer_ids($node->type);
+    $form['#redirect'] = 'node/' . $node->nid;
   }
   // Form cannot pass on source object.
-  $form['#importer_id'] = $source->id;
-  $form['#feed_nid'] = $source->feed_nid;
-  $form['source_status'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Status'),
-    '#tree' => TRUE,
-    '#value' => feeds_source_status($source),
-  );
+  $form['#feed_nid'] = $node->nid;
+  foreach($importer_ids as $importer_id => $weight){
+    $form['#importer_ids'][] = $importer_id;
+    $source = feeds_source($importer_id, $node->nid);
+    $form[$importer_id]['source_status'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Status'),
+      '#tree' => TRUE,
+      '#value' => feeds_source_status($source),
+    );
+    $progress = $source->progressClearing();
+    $total_progress += $progress; 
+  }
   $form = confirm_form($form, t('Delete all items from source?'), $form['#redirect'], '', t('Delete'), t('Cancel'), 'confirm feeds update');
-  $progress = $source->progressClearing();
-  if ($progress !== FEEDS_BATCH_COMPLETE) {
-    $form['actions']['submit']['#disabled'] = TRUE;
-    $form['actions']['submit']['#value'] =
-      t('Deleting (@progress %)', array('@progress' => number_format(100 * $progress, 0)));
+  
+  if (count($importer_ids)) {
+    $progress = $total_progress / count($importer_ids);
+    if ($progress !== FEEDS_BATCH_COMPLETE) {
+      $form['actions']['submit']['#disabled'] = TRUE;
+      $form['actions']['submit']['#value'] =
+        t('Deleting (@progress %)', array('@progress' => number_format(100 * $progress, 0)));
+    }
   }
   return $form;
 }
@@ -181,7 +205,9 @@ function feeds_delete_tab_form($form, &$form_state, $importer_id, $node = NULL)
 function feeds_delete_tab_form_submit($form, &$form_state) {
   $form_state['redirect'] = $form['#redirect'];
   $feed_nid = empty($form['#feed_nid']) ? 0 : $form['#feed_nid'];
-  feeds_source($form['#importer_id'], $feed_nid)->startClear();
+  foreach ($form['#importer_ids'] as $importer_id) {
+    feeds_source($importer_id, $feed_nid)->startClear();
+  }
 }
 
 /**
diff --git includes/FeedsImporter.inc includes/FeedsImporter.inc
index 39fd7d3..abdc71e 100644
--- includes/FeedsImporter.inc
+++ includes/FeedsImporter.inc
@@ -236,6 +236,7 @@ class FeedsImporter extends FeedsConfigurable {
         'plugin_key' => 'FeedsNodeProcessor',
       ),
       'content_type' => '',
+      'weight' => 0,
       'update' => 0,
       'import_period' => 1800, // Refresh every 30 minutes by default.
       'expire_period' => 3600, // Expire every hour by default, this is a hidden setting.
@@ -263,6 +264,12 @@ class FeedsImporter extends FeedsConfigurable {
       '#description' => t('A description of this importer.'),
       '#default_value' => $config['description'],
     );
+    $form['weight'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Weight'),
+      '#description' => t('Determines the effective processing order of this feed relative to others that might run at the same time.'),
+      '#default_value' => $config['weight'],
+    );
     $node_types = node_type_get_names();
     array_walk($node_types, 'check_plain');
     $form['content_type'] = array(
diff --git plugins/FeedsNodeProcessor.inc plugins/FeedsNodeProcessor.inc
index bf5f427..e48e976 100644
--- plugins/FeedsNodeProcessor.inc
+++ plugins/FeedsNodeProcessor.inc
@@ -190,20 +190,22 @@ class FeedsNodeProcessor extends FeedsProcessor {
    * Override setTargetElement to operate on a target item that is a node.
    */
   public function setTargetElement(FeedsSource $source, $target_node, $target_element, $value) {
-    switch ($target_element) {
-      case 'created':
-        $target_node->created = feeds_to_unixtime($value, REQUEST_TIME);
-        break;
-      case 'feeds_source':
-        // Get the class of the feed node importer's fetcher and set the source
-        // property. See feeds_node_update() how $node->feeds gets stored.
-        if ($id = feeds_get_importer_id($this->config['content_type'])) {
+    if ($ids = feeds_get_importer_ids($this->config['content_type'])) {
+      foreach ($ids as $id) {
+        if ($target_element == 'feeds_source_' . $id) {
+          // Get the class of the feed node importer's fetcher and set the source
+          // property. See feeds_node_update() how $node->feeds gets stored.
           $class = get_class(feeds_importer($id)->fetcher);
-          $target_node->feeds[$class]['source'] = $value;
+          $target_node->feeds[$id][$class]['source'] = $value;
           // This effectively suppresses 'import on submission' feature.
           // See feeds_node_insert().
-          $target_node->feeds['suppress_import'] = TRUE;
+          $target_node->feeds[$id]['suppress_import'] = TRUE;
         }
+      }
+    }
+    switch ($target_element) {
+      case 'created':
+        $target_node->created = feeds_to_unixtime($value, REQUEST_TIME);
         break;
       default:
         parent::setTargetElement($source, $target_node, $target_element, $value);
@@ -243,13 +245,15 @@ class FeedsNodeProcessor extends FeedsProcessor {
       ),
     );
     // If the target content type is a Feed node, expose its source field.
-    if ($id = feeds_get_importer_id($this->config['content_type'])) {
-      $name = feeds_importer($id)->config['name'];
-      $targets['feeds_source'] = array(
-        'name' => t('Feed source'),
-        'description' => t('The content type created by this processor is a Feed Node, it represents a source itself. Depending on the fetcher selected on the importer "@importer", this field is expected to be for example a URL or a path to a file.', array('@importer' => $name)),
-        'optional_unique' => TRUE,
-      );
+    if ($ids = feeds_get_importer_ids($this->config['content_type'])) {
+      foreach ($ids as $id) {
+        $name = feeds_importer($id)->config['name'];
+        $targets['feeds_source_' . $id] = array(
+          'name' => t('Feed source'),
+          'description' => t('The content type created by this processor is a Feed Node, it represents a source itself. Depending on the fetcher selected on the importer "@importer", this field is expected to be for example a URL or a path to a file.', array('@importer' => $name)),
+          'optional_unique' => TRUE,
+        );
+      }
     }
 
     // Let other modules expose mapping targets.
@@ -274,11 +278,13 @@ class FeedsNodeProcessor extends FeedsProcessor {
         case 'nid':
           $nid = db_query("SELECT nid FROM {node} WHERE nid = :nid", array(':nid' => $value))->fetchField();
           break;
-        case 'feeds_source':
-          if ($id = feeds_get_importer_id($this->config['content_type'])) {
+      }
+      if ($ids = feeds_get_importer_ids($this->config['content_type'])) {
+        foreach ($ids as $id) {
+          if ($target == 'feeds_source_' . $id) {
             $nid = db_query("SELECT fs.feed_nid FROM {node} n JOIN {feeds_source} fs ON n.nid = fs.feed_nid WHERE fs.id = :id AND fs.source = :source", array(':id' => $id, ':source' => $value))->fetchField();
           }
-          break;
+        }
       }
       if ($nid) {
         // Return with the first nid found.
