Index: newsletter.install
===================================================================
--- newsletter.install	(revision 781)
+++ newsletter.install	(working copy)
@@ -721,3 +721,39 @@
     field_update_field($field);
   }
 }
+
+
+/**
+ * Update module for huge variables which break down the performance
+ */
+function newsletter_update_7105(&$sandbox){
+
+  $schema['newsletter_long_variables'] = array(
+    'description' => 'Contains the newsletters variables that could be huge and can destroy the performance.',
+    'fields' => array(
+      'name' => array(
+        'description' => 'The name of the variable.',
+        'type' => 'varchar',
+        'length' => 128,
+        'not null' => TRUE,
+        'default' => '',
+      ),
+      'value' => array(
+        'description' => 'The value of the variable.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'size' => 'big',
+        'translatable' => TRUE,
+      ),
+    ),
+    'primary key' => array('name'),
+  );
+
+  db_create_table('newsletter_long_variables', $schema['newsletter_long_variables']);  // THIS IS SAFE BECAUSE $schema IS EXPLICIT
+
+  //Check if there are any variables in the variable table
+  db_query("INSERT INTO {newsletter_long_variables} SELECT `name`, `value` FROM {variable} WHERE `name` LIKE 'newsletter_custom%'");
+  
+  db_query("DELETE FROM {variable} WHERE `name` LIKE 'newsletter_custom%'");
+
+}
\ No newline at end of file
Index: includes/newsletter.newsletter.controller.inc
===================================================================
--- includes/newsletter.newsletter.controller.inc	(revision 781)
+++ includes/newsletter.newsletter.controller.inc	(working copy)
@@ -64,12 +64,12 @@
    *
    */
   public function saveDraft($subscribers, $draft) {
-    $drafts = variable_get('newsletter_custom_drafts', array());
+    $drafts = newsletter_variable_get('newsletter_custom_drafts', array());
     $drafts[$draft->nnid] = array(
       'subscribers' => $subscribers,
       'ntid' => $draft->ntid,
     );
-    variable_set('newsletter_custom_drafts', $drafts);
+    newsletter_variable_set('newsletter_custom_drafts', $drafts);
   }
 
   public function delete($nnid) {
@@ -88,10 +88,10 @@
   }
 
   public function deleteDraft($nnid) {
-    $drafts = variable_get('newsletter_custom_drafts', array());
+    $drafts = newsletter_variable_get('newsletter_custom_drafts', array());
     if (!empty($drafts[$nnid])) {
       unset($drafts[$nnid]);
-      variable_set('newsletter_custom_drafts', $drafts);
+      newsletter_variable_set('newsletter_custom_drafts', $drafts);
       // Also delete from database.
       return $this->delete($nnid);
     }
Index: includes/newsletter.admin.inc
===================================================================
--- includes/newsletter.admin.inc	(revision 781)
+++ includes/newsletter.admin.inc	(working copy)
@@ -1557,13 +1557,13 @@
  *   The id of the newsletter.
  */
 function newsletter_queue_custom_newsletter($subscribers, $newsletter) {
-    $custom_queue = variable_get('newsletter_custom_for_next_cron', array());
+    $custom_queue = newsletter_variable_get('newsletter_custom_for_next_cron', array());
     $custom_queue[] = array(
       'subscribers' => $subscribers,
       'ntid' => $newsletter->ntid,
       'nnid' => $newsletter->nnid,
     );
-    variable_set('newsletter_custom_for_next_cron', $custom_queue);
+    newsletter_variable_set('newsletter_custom_for_next_cron', $custom_queue);
     drupal_set_message(t('Newsletter queued for the next cron run'));
 }
 
@@ -1605,7 +1605,7 @@
  *   draft: boolean TRUE.
  */
 function newsletter_load_custom_newsletters($sent = TRUE) {
-  $draft_newsletters = variable_get('newsletter_custom_drafts', array());
+  $draft_newsletters = newsletter_variable_get('newsletter_custom_drafts', array());
   $custom_newsletters = array();
   foreach ($draft_newsletters as $nnid => $newsletter) {
     $draft = new stdClass();
@@ -1642,11 +1642,11 @@
  *   The draft's key in Drupal's variable system, which is the newsletter's id.
  */
 function newsletter_send_draft($nnid) {
-  $drafts = variable_get('newsletter_custom_drafts', array());
+  $drafts = newsletter_variable_get('newsletter_custom_drafts', array());
   if (isset($drafts[$nnid]) && !empty($drafts[$nnid])) {
     $newsletter = newsletter_newsletter_load($nnid);
     newsletter_queue_custom_newsletter($drafts[$nnid]['subscribers'], $newsletter);
     unset($drafts[$nnid]);
-    variable_set('newsletter_custom_drafts', $drafts);
+    newsletter_variable_set('newsletter_custom_drafts', $drafts);
   }
 }
Index: newsletter.module
===================================================================
--- newsletter.module	(revision 781)
+++ newsletter.module	(working copy)
@@ -11,6 +11,13 @@
  */
 function newsletter_menu() {
   $items = array();
+  $items['josdeputa'] = array(
+    'title' => 'Newsletters',
+    'description' => 'Manage newsletters, subscribers, and settings.',
+    'access arguments' => array('administer newsletters'),
+    'page callback' => 'josdeputa',
+    'page arguments' => array('newsletter_stats'),
+  );
   $items['admin/config/media/newsletter'] = array(
     'title' => 'Newsletters',
     'description' => 'Manage newsletters, subscribers, and settings.',
@@ -330,7 +337,7 @@
   $nlids_sent = array();
 
   // Custom Newsletters
-  $custom_queues = variable_get('newsletter_custom_for_next_cron', array());
+  $custom_queues = newsletter_variable_get('newsletter_custom_for_next_cron', array());
   if (!empty($custom_queues)) {
     foreach ($custom_queues as $num => $custom_queue) {
       $data = newsletter_create($custom_queue['subscribers'], $custom_queue['ntid'], $custom_queue['nnid'])
@@ -344,7 +351,7 @@
         unset($custom_queues[$num]);
       }
     }
-    variable_set('newsletter_custom_for_next_cron', $custom_queues);
+    newsletter_variable_set('newsletter_custom_for_next_cron', $custom_queues);
   }
 
   // Nesletters with remaining subscribers or Manual queued
@@ -1424,3 +1431,46 @@
     drupal_goto('newsletter/subscribe', array('query' => $q));
   }
 }
+
+
+/**
+ * New function for variable_set and variable_get for long variables
+ **/
+function newsletter_variable_get($name, $default = NULL){
+  $result = db_select('newsletter_long_variables', 'nlv')
+    ->fields('nlv')
+    ->condition('name', $name,'=')
+    ->execute()
+    ->fetchAssoc();
+  if (!empty($result)){
+    $return = unserialize($result['value']);
+  } else {
+    $return = $default;
+  }
+  return $return;
+}
+
+function newsletter_variable_set($name, $value){
+  $value = serialize($value);
+
+  $result = db_select('newsletter_long_variables', 'nlv')
+    ->fields('nlv')
+    ->condition('name', $name,'=')
+    ->execute()
+    ->fetchAssoc();
+  if (empty($result)){
+    $nid = db_insert('newsletter_long_variables') // Table name no longer needs {}
+    ->fields(array(
+      'name' => $name,
+      'value' => $value
+    ))
+    ->execute();
+  } else {
+    $num_updated = db_update('newsletter_long_variables') // Table name no longer needs {}
+      ->fields(array(
+        'value' => $value,
+      ))
+      ->condition('name', $name, '=')
+      ->execute();
+  }
+}
\ No newline at end of file
