Index: includes/simplenews.mail.inc
===================================================================
--- includes/simplenews.mail.inc	(revision 301)
+++ includes/simplenews.mail.inc	(working copy)
@@ -198,14 +198,15 @@
         $message['body'],
         $plain,
         $message['headers'],
-        $plain ? $message['body'] : simplenews_html_to_text($message['body'], TRUE),
+        $message['text_alternative'],
         isset($message['params']['context']['node']->files) ? $message['params']['context']['node']->files : array(),
         $message['id']
       );
       // Mimemail has changed its API (see http://drupal.org/node/808518) but we keep backward compatibility
       if (is_array($mimemail_result)) {
         $message = $mimemail_result;
-      } else {
+      } 
+      else {
         $message['result'] = $mimemail_result;
       }
     }
Index: simplenews.module
===================================================================
--- simplenews.module	(revision 301)
+++ simplenews.module	(working copy)
@@ -355,8 +355,8 @@
     }
   }
 
-  // Show newsletter sending options if newsletter has not been send yet.
-  // If send a nodification is shown.
+  // Show newsletter sending options if newsletter has not been sent yet.
+  // If sent a nodification is shown.
   if (!isset($simplenews_values['s_status']) || (isset($simplenews_values['s_status']) && $simplenews_values['s_status'] == SIMPLENEWS_STATUS_SEND_NOT)) {
     $options[SIMPLENEWS_COMMAND_SEND_TEST] = t('Send one test newsletter to the test address');
     $options[SIMPLENEWS_COMMAND_SEND_NOW] = t('Send newsletter');
@@ -788,12 +788,12 @@
   }
 
   // Simplenews newsletter node form
-  elseif (isset($form['type']) && isset($form['#node']) && strpos($form_id, '_node_form')) {
+  if (isset($form['type']) && isset($form['#node']) && strpos($form_id, '_node_form')) {
     if (in_array($form['type']['#value'], variable_get('simplenews_content_types', array('simplenews')))) {
       // Available variables are based on user_mail_tokens().
       // But uses only those which can be used with uid = 0 since simplenews also sends to anonymous users.
       if (isset($form['body_field'])) {
-        $form['body_field']['body']['#description'] = t("This will be the body of your newsletter. See 'Replacement patterns' for available variables.)");
+        $form['body_field']['body']['#description'] = t("This will be the body of your newsletter. See 'Replacement patterns' for available variables.");
       }
       $form['simplenews_subscription']['subscription_mail']['token_help'] = array(
         '#title' => t('Replacement patterns'),
@@ -806,7 +806,7 @@
       $form['simplenews_subscription']['subscription_mail']['token_help']['help'] = array(
         '#value' => theme('token_help', 'simplenews'),
       );
-
+      
       $vocabulary = taxonomy_vocabulary_load(variable_get('simplenews_vid', ''));
       if (!empty($vocabulary) && !isset($vocabulary->nodes[$form['type']['#value']])) {
         drupal_set_message(t('Invalid vocabulary setting detected. Check and <strong>save</strong> the <a href="@settings">Simplenews general settings</a>.', array(
@@ -816,6 +816,26 @@
       }
     }
   }
+
+  // add selector per node type for Plain Text field
+  if ($form_id == "node_type_form") {
+    if (!in_array($form['#node_type']->type, variable_get("simplenews_content_types", array()))) return;
+    
+    $form['simplenews'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Simplenews'),
+      '#collapsed' => true,
+    );
+    
+    $form['simplenews']['simplenews_plain_field'] = array(
+      '#type' => 'select',
+      '#title' => t('Custom field for plain text newsletter'),
+      '#options' => _simplenews_plain_field_options(),
+      '#description' => t('Choose a text field wich contains the custom plain text content of the newsletter. If no field is chosen, the plain text version of the newsletter 
+        is automatically generated.'),
+      '#default_value' => variable_get('simplenews_plain_field_' . $form['#node_type']->type, 'none'),
+    );
+  }
 }
 
 /**
@@ -1713,7 +1733,7 @@
       // $message buffer is node and language specific.
       static $messages = array();
 
-      // By default the the node is send which is supplied in the function call.
+      // By default the node is send which is supplied in the function call.
       // When translation is used, the availability of translations is checked
       // and when available the translation of the preferred language is selected.
       $nid = $context['node']->nid;
@@ -1826,9 +1846,16 @@
       // Build message body, replace tokens.
       $body = token_replace($body, 'simplenews', $context);
       // Convert to plain text if required.
-      if ($context['node']->simplenews['s_format'] == 'plain') {
+      $field_plaintext = variable_get('simplenews_plain_field_' . $node->type, 'none');
+      if ($context['node']->simplenews['s_format'] == 'plain' && !trim($context['node']->{$field_plaintext}[0]['value'])) {
         $body = simplenews_html_to_text($body, variable_get('simplenews_hyperlinks_' . $context['node']->simplenews['tid'], 1));
       }
+      else if ($context['node']->simplenews['s_format'] == 'plain') {
+        $body = theme('simplenews_newsletter_text_alternative', $context['node'], $context['node']->simplenews['tid'], $field_plaintext);
+      }
+      // Get alternative text field
+      $message['text_alternative'] = theme('simplenews_newsletter_text_alternative', $context['node'], $context['node']->simplenews['tid'], $field_plaintext);
+       
       $message['body']['body'] = $body;
 
       // Build message footer, replace tokens.
@@ -2378,6 +2405,9 @@
       'arguments' => array('name' => NULL, 'title' => NULL, 'language' => NULL),
       'path' => $path . '/theme',
     ),
+    'simplenews_newsletter_text_alternative' => array(
+      'arguments' => array('node' => NULL, 'tid' => NULL, 'plain_field' => NULL),
+    ),
     'simplenews_newsletter_body' => array(
       'template' => 'simplenews-newsletter-body',
       'arguments' => array('node' => NULL, 'language' => NULL),
@@ -2447,6 +2477,22 @@
 }
 
 /**
+* Theme the newsletter message subject and body.
+*/
+function theme_simplenews_newsletter_text_alternative($node, $tid, $plain_field) {
+  // In an override of this function, $text can be loaded with other field from the node.
+  $text  = $node->title . "\n\n";
+  if ($plain_field == 'body') {
+    $text .= $node->body . "\n\n";
+  } 
+  else {
+    $plain = $node->$plain_field;
+    $text .= $plain[0]['value'] . "\n\n";
+  }
+  return $text;
+}
+
+/**
  * Process variables to format the simplenews newsletter footer.
  *
  * $variables are empty:
@@ -2522,3 +2568,22 @@
       break;
   }
 }
+
+/**
+* Determine possible plain text field options.
+*
+* The CCK module must be installed to use CCK fields.
+*/
+function _simplenews_plain_field_options() {
+  $options = array('none' => t('none'));
+  $options['body'] = t('body');
+  if (module_exists('content')) {
+    $fields = content_fields();
+    foreach($fields as $field){
+      if ($field['type'] == 'text') {
+        $options[$field['field_name']] = $field['field_name'];
+      }
+    }
+  }
+  return $options;
+}
\ No newline at end of file
