Index: feeds.pages.inc
===================================================================
--- feeds.pages.inc	(revision 977)
+++ feeds.pages.inc	(working copy)
@@ -99,21 +99,25 @@
  * Render a feeds import form on node/id/import pages.
  */
 function feeds_import_tab_form(&$form_state, $node) {
-  $importer = feeds_importer_by_content_type($node->type);
+  $importers = feeds_importer_by_content_type($node->type);
 
   $form = array();
   $form['#feed_nid'] = $node->nid;
-  $form['#importer_id'] = $importer->id;
-  return confirm_form($form, t('Import all content from feed?'), 'node/'. $node->nid, '', t('Import'), t('Cancel'), 'confirm feeds update');
+  foreach($importers as $importer) {
+    $form['#importers'][] = $importer->id;
+  }
+  return confirm_form($form, t('Import all content from feeds?'), 'node/'. $node->nid, '', t('Import'), t('Cancel'), 'confirm feeds update');
 }
 
 /**
  * Submit handler for feeds_import_tab_form().
  */
 function feeds_import_tab_form_submit($form, $form_state) {
-  $importer = feeds_importer($form['#importer_id']);
-  $source = feeds_source($importer, $form['#feed_nid']);
-  $importer->import($source);
+  foreach ($form['#importers'] as $importer_id) {
+    $importer = feeds_importer($importer_id);
+    $source = feeds_source($importer, $form['#feed_nid']);
+    $importer->import($source);
+  }
 }
 
 /**
Index: feeds.module
===================================================================
--- feeds.module	(revision 977)
+++ feeds.module	(working copy)
@@ -170,17 +170,20 @@
     $importer_id = $param;
   }
   elseif ($param->type) {
-    if ($importer = feeds_importer_by_content_type($param->type)) {
-      $importer_id = $importer->id;
+    if ($importers = feeds_importer_by_content_type($param->type)) {
+      foreach ($importers as $importer) {
+        $importer_type_access = $importer_type_access || user_access($action .' '. $importer->id .' feeds');
+      }
     }
   }
-
+  
   // Check for permissions if feed id is present, otherwise return FALSE.
-  if (isset($importer_id)) {
-    if (user_access('administer feeds') || user_access($action .' '. $importer_id .' feeds')) {
+  if (isset($importer_id) || isset($importer_type_access)) {
+    if (user_access('administer feeds') || user_access($action .' '. $importer_id .' feeds') || $importer_type_access) {
       return TRUE;
     }
   }
+  
   return FALSE;
 }
 
@@ -243,38 +246,39 @@
   // Break out node processor related nodeapi functionality.
   _feeds_nodeapi_node_processor($node, $op);
 
-  if ($importer = feeds_importer_by_content_type($node->type)) {
-    switch ($op) {
-      case 'validate':
-        // On validation stage we are working with a FeedsSource object that is
-        // not tied to a nid - when creating a new node there is $node->nid at
-        // this stage.
-        $source = feeds_source($importer);
+  if ($importers = feeds_importer_by_content_type($node->type)) {
+    foreach ($importers as $importer) {
+      switch ($op) {
+        case 'validate':
+          // On validation stage we are working with a FeedsSource object that is
+          // not tied to a nid - when creating a new node there is $node->nid at
+          // this stage.
+          $source = feeds_source($importer);
 
-        // If node title is empty, try to retrieve title from feed.
-        if (trim($node->title) == '') {
-          try {
-            $source->addConfig($node->feeds);
-            $result = $importer->fetcher->fetch($source);
-            $result = $importer->parser->parse($result, $source);
-            if (!isset($result->value['title']) || trim($result->value['title']) == '') {
-              form_set_error('title', t('Could not retrieve title from feed.'), 'error');
+          // If node title is empty, try to retrieve title from feed.
+          if (trim($node->title) == '') {
+            try {
+              $source->addConfig($node->feeds[$importer->id]);
+              $result = $importer->fetcher->fetch($source);
+              $result = $importer->parser->parse($result, $source);
+              if (!isset($result->value['title']) || trim($result->value['title']) == '') {
+                form_set_error('title', t('Could not retrieve title from feed.'), 'error');
+              }
+              else {
+                // Keep the title in a static cache and populate $node->title on
+                // 'presave' as node module looses any changes to $node after
+                // 'validate'.
+                $last_title = $result->value['title'];
+              }
             }
-            else {
-              // Keep the title in a static cache and populate $node->title on
-              // 'presave' as node module looses any changes to $node after
-              // 'validate'.
-              $last_title = $result->value['title'];
+            catch (Exception $e) {
+              drupal_set_message($e->getMessage(), 'error');
             }
           }
-          catch (Exception $e) {
-            drupal_set_message($e->getMessage(), 'error');
-          }
-        }
 
-        // Invoke source
-        // Node module magically moved $form['feeds'] to $node->feeds :P
-        $source->configFormValidate($node->feeds);
+          // Invoke source
+          // Node module magically moved $form['feeds'] to $node->feeds :P
+          $source->configFormValidate($node->feeds[$importer->id]);
         break;
       case 'presave':
         if (!empty($last_title)) {
@@ -286,7 +290,7 @@
       case 'update':
         // Add configuration to feed source and save.
         $source = feeds_source($importer, $node->nid);
-        $source->addConfig($node->feeds);
+        $source->addConfig($node->feeds[$importer->id]);
         $source->save();
 
         // Refresh feed if import on create is selected and suppress_import is
@@ -305,6 +309,7 @@
         feeds_scheduler()->remove($importer->id, 'import', $node->nid);
         feeds_source($importer, $node->nid)->delete();
         break;
+      }
     }
   }
 }
@@ -344,18 +349,21 @@
  */
 function feeds_form_alter(&$form, $form_state, $form_id) {
   if ($form['#id'] == 'node-form') {
-    if ($importer = feeds_importer_by_content_type($form['type']['#value'])) {
+    if ($importers = feeds_importer_by_content_type($form['type']['#value'])) {
+    
       // Set title to not required, try to retrieve it from feed.
       $form['title']['#required'] = FALSE;
 
       // Build form.
-      $source = feeds_source($importer, empty($form['nid']['#value']) ? 0 : $form['nid']['#value']);
       $form['feeds'] = array(
         '#type' => 'fieldset',
         '#title' => t('Feed'),
         '#tree' => TRUE,
       );
-      $form['feeds'] += $source->configForm($form_state);
+      foreach ($importers as $importer) {
+        $source = feeds_source($importer, empty($form['nid']['#value']) ? 0 : $form['nid']['#value']);
+        $form['feeds'][$importer->id] = $source->configForm($form_state);
+      }
 
       // Cannot pass on the FeedsImporter object, pass on id.
       $form['#feed_id'] = $importer->id;
@@ -456,8 +464,7 @@
     $feeds[$content_type] = FALSE;
     foreach (feeds_importer_load_all() as $importer) {
       if ((!$importer->disabled) && $importer->config['content_type'] == $content_type) {
-        $feeds[$content_type] = $importer;
-        break;
+        $feeds[$content_type][] = $importer;
       }
     }
   }
