diff --git a/ces_message/ces_message.install b/ces_message/ces_message.install
index ed2a12d..a8d73bf 100755
--- a/ces_message/ces_message.install
+++ b/ces_message/ces_message.install
@@ -215,6 +215,11 @@ function ces_message_install() {
   ces_message_install_action('account_debit_pending', 'Account debit pending');
   ces_message_install_action('account_debit_rejected', 'Account debit rejected');
   ces_message_install_action('account_credit_rejected', 'Account credit rejected');
+  ces_message_install_action('alert_offerwant_expired', 'Offer/want expired');
+  ces_message_install_action('alert_offerwant_newoffer', 'New offering in the exchange');
+  ces_message_install_action('alert_offerwant_newwant', 'New want in the exchange');
+  ces_message_install_action('alert_offerwant_offersperiodical', 'Periodical list of offerings');
+  ces_message_install_action('alert_offerwant_wantsperiodical', 'Periodical list of wants');
 
   ces_message_install_default_templates();
 }
@@ -240,12 +245,24 @@ function ces_message_update_7102() {
   ces_message_install_default_templates();
 }
 /**
- * Quirt update 10/7/2014.
+ * Fourth update 10/7/2014.
  */
 function ces_message_update_7103() {
   ces_message_install_default_templates();
 }
 /**
+ * Fiveth update 10/12/2015.
+ */
+function ces_message_update_7104() {
+  ces_message_install_action('alert_offerwant_expired', 'Offer/want expired');
+  ces_message_install_action('alert_offerwant_newoffer', 'New offering in the exchange');
+  ces_message_install_action('alert_offerwant_newwant', 'New want in the exchange');
+  ces_message_install_action('alert_offerwant_offersperiodical', 'Periodical list of offerings');
+  ces_message_install_action('alert_offerwant_wantsperiodical', 'Periodical list of wants');
+
+  ces_message_install_default_templates();
+}
+/**
  * Implements hook_uninstall().
  *
  * At uninstall time we'll notify field.module that the entity was deleted
diff --git a/ces_message/ces_message.module b/ces_message/ces_message.module
index 62a1af5..93da67f 100755
--- a/ces_message/ces_message.module
+++ b/ces_message/ces_message.module
@@ -398,7 +398,6 @@ function ces_message_send_notify($action, $params, $recipient = array(), $sender
 
   }
 }
-
 /**
  * Implements hook_mail().
  */
@@ -430,6 +429,30 @@ function ces_message_mail($key, &$message, $params) {
 
 }
 /**
+ * Send email for alerts.
+ *
+ * @param string $action
+ *   Ces action.
+ * @param array $params
+ *   Array with the objects needed to process the template.
+ * @param array $exchange
+ *   Exchange ID to send the email.
+ */
+function ces_message_send_alert($action, $params, $exchange = NULL) {
+  if ($exchange == NULL) {
+    $exchange = ces_bank_get_current_exchange();
+  }
+  $emails = db_query("
+    SELECT u.mail AS mail
+    FROM {users} u
+    LEFT JOIN {ces_accountuser} au ON u.uid = au.user
+    LEFT JOIN {ces_account} a ON au.account = a.id
+    WHERE a.exchange = :exchangeid",
+    array(
+      ':exchangeid' => $exchange['id'],
+    ));
+}
+/**
  * Provides a test.
  */
 function ces_message_template_test($action = 'account_activated', $recipient = 1) {
diff --git a/ces_message/includes/actions/en/alert_offerwant_expired.inc b/ces_message/includes/actions/en/alert_offerwant_expired.inc
new file mode 100644
index 0000000..c76fb3a
--- /dev/null
+++ b/ces_message/includes/actions/en/alert_offerwant_expired.inc
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * @file
+ * English alert offerwant expired template.
+ *
+ * @ingroup ces_message_template
+ */
+
+$subject = '[[exchange:shortname]] Your [offer:type] is expired: [offer:title]';
+
+$body = 'Dear [account:user:fullname],
+
+Your [offer:type] is expired:
+[offer:title]
+
+To update your [offer:type], please visit:
+[site:url]/ces/bank/account/my[offer:type]s/[offer:id]/edit
+
+Happy trading!
+
+[exchange:shortname] administrator:
+[exchange:admin:fullname]
+[exchange:admin:mail]
+[exchange:admin:mainphone]
+
+You can configure your notification preferences in:
+[account:user:url]
+';
diff --git a/ces_message/includes/actions/en/alert_offerwant_newoffer.inc b/ces_message/includes/actions/en/alert_offerwant_newoffer.inc
new file mode 100644
index 0000000..cb6e396
--- /dev/null
+++ b/ces_message/includes/actions/en/alert_offerwant_newoffer.inc
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * @file
+ * English alert new offer template.
+ *
+ * @ingroup ces_message_template
+ */
+
+$subject = '[[exchange:shortname]] New offer in your network: [offer:title]';
+
+$body = 'Dear [account:user:fullname],
+
+A new offer has been created in your network:
+[offer:title]
+
+If you are interested in it, please visit:
+[site:url]/ces/bank/account/myoffers/[offer:id]/view
+
+Happy trading!
+
+[exchange:shortname] administrator:
+[exchange:admin:fullname]
+[exchange:admin:mail]
+[exchange:admin:mainphone]
+
+You can configure your notification preferences in:
+[account:user:url]
+';
diff --git a/ces_message/includes/actions/en/alert_offerwant_newwant.inc b/ces_message/includes/actions/en/alert_offerwant_newwant.inc
new file mode 100644
index 0000000..a68ae05
--- /dev/null
+++ b/ces_message/includes/actions/en/alert_offerwant_newwant.inc
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * @file
+ * English alert new want template.
+ *
+ * @ingroup ces_message_template
+ */
+
+$subject = '[[exchange:shortname]] New want in your network: [offer:title]';
+
+$body = 'Dear [account:user:fullname],
+
+A new want has been created in your network:
+[offer:title]
+
+If you are interested in it, please visit:
+[site:url]/ces/bank/account/mywants/[offer:id]/view
+
+Happy trading!
+
+[exchange:shortname] administrator:
+[exchange:admin:fullname]
+[exchange:admin:mail]
+[exchange:admin:mainphone]
+
+You can configure your notification preferences in:
+[account:user:url]
+';
diff --git a/ces_message/includes/actions/en/alert_offerwant_offersperiodical.inc b/ces_message/includes/actions/en/alert_offerwant_offersperiodical.inc
new file mode 100644
index 0000000..d0511f0
--- /dev/null
+++ b/ces_message/includes/actions/en/alert_offerwant_offersperiodical.inc
@@ -0,0 +1,25 @@
+<?php
+
+/**
+ * @file
+ * English alert periodical offers template.
+ *
+ * @ingroup ces_message_template
+ */
+
+$subject = '[[exchange:shortname]] Last offerings list';
+
+$body = 'Dear [account:user:fullname],
+
+This is a list of the last updated offerings in your network.
+
+Happy trading!
+
+[exchange:shortname] administrator:
+[exchange:admin:fullname]
+[exchange:admin:mail]
+[exchange:admin:mainphone]
+
+You can configure your notification preferences in:
+[account:user:url]
+';
diff --git a/ces_message/includes/actions/en/alert_offerwant_wantsperiodical.inc b/ces_message/includes/actions/en/alert_offerwant_wantsperiodical.inc
new file mode 100644
index 0000000..859402d
--- /dev/null
+++ b/ces_message/includes/actions/en/alert_offerwant_wantsperiodical.inc
@@ -0,0 +1,25 @@
+<?php
+
+/**
+ * @file
+ * English alert periodical wants template.
+ *
+ * @ingroup ces_message_template
+ */
+
+$subject = '[[exchange:shortname]] Last wants list';
+
+$body = 'Dear [account:user:fullname],
+
+This is a list of the last updated wants in your network.
+
+Happy trading!
+
+[exchange:shortname] administrator:
+[exchange:admin:fullname]
+[exchange:admin:mail]
+[exchange:admin:mainphone]
+
+You can configure your notification preferences in:
+[account:user:url]
+';
diff --git a/ces_offerswants/ces_offerswants.info b/ces_offerswants/ces_offerswants.info
index f5679f6..f2636e9 100644
--- a/ces_offerswants/ces_offerswants.info
+++ b/ces_offerswants/ces_offerswants.info
@@ -3,5 +3,7 @@ description = Simple offers and wants module.
 core = 7.x
 package = ices
 dependencies[] = ices
+dependencies[] = ces_bank
+dependencies[] = ces_message
 dependencies[] = image
 files[] = ces_offerswants.test
diff --git a/ces_offerswants/ces_offerswants.install b/ces_offerswants/ces_offerswants.install
index d927385..eda412d 100644
--- a/ces_offerswants/ces_offerswants.install
+++ b/ces_offerswants/ces_offerswants.install
@@ -187,6 +187,127 @@ function ces_offerswants_schema() {
     ),
     'primary key' => array('cid'),
   );
+  $schema['ces_alerts'] = array(
+    'description' => 'Table for offers&wants alerts of each exchange.',
+    'fields' => array(
+      'id' => array(
+        'description' => 'Primary Key: Unique alert ID.',
+        'type' => 'serial',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+      ),
+      'exchange' => array(
+        'description' => 'The {ces_exchange}.id of the alerts.',
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'default' => 0,
+      ),
+      'ow_expired' => array(
+        'description' => 'Enabled/disabled alert offerwant expired.',
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 1,
+      ),
+      'ow_expired_lasttime' => array(
+        'description' => 'Last time cron runs alert offerwant expired, as a Unix timestamp.',
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 0,
+      ),
+      'ow_expired_noalertusers' => array(
+        'description' => 'Users not to send alert offerwant expired.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'serialize' => TRUE,
+      ),
+      'newoffer' => array(
+        'description' => 'Enabled/disabled alert newoffer.',
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 1,
+      ),
+      'newoffer_emaillist' => array(
+        'description' => 'List of other emails to send alert newoffer.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'serialize' => TRUE,
+      ),
+      'newoffer_noalertusers' => array(
+        'description' => 'Users not to send alert newoffer.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'serialize' => TRUE,
+      ),
+      'newwant' => array(
+        'description' => 'Enabled/disabled alert newwant.',
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 1,
+      ),
+      'newwant_emaillist' => array(
+        'description' => 'List of other emails to send alert newwant.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'serialize' => TRUE,
+      ),
+      'newwant_noalertusers' => array(
+        'description' => 'Users not to send alert newwant.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'serialize' => TRUE,
+      ),
+      'offers_periodical' => array(
+        'description' => 'Alert offers periodical: disabled(0), weekly(1), biweekly(2), monthly(3), bimonthly(4).',
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 1,
+      ),
+      'offers_periodical_emaillist' => array(
+        'description' => 'List of other emails to send alert offers periodical.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'serialize' => TRUE,
+      ),
+      'offers_periodical_noalertusers' => array(
+        'description' => 'Users not to send alert offers periodical.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'serialize' => TRUE,
+      ),
+      'wants_periodical' => array(
+        'description' => 'Alert wants periodical: disabled(0), weekly(1), biweekly(2), monthly(3), bimonthly(4).',
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 1,
+      ),
+      'wants_periodical_emaillist' => array(
+        'description' => 'List of other emails to send alert wants periodical.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'serialize' => TRUE,
+      ),
+      'wants_periodical_noalertusers' => array(
+        'description' => 'Users not to send alert wants periodical.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'serialize' => TRUE,
+      ),
+      'created' => array(
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'The time that the alerts for this exchange were created, as a Unix timestamp.',
+      ),
+    ),
+    'primary key' => array('id'),
+  );
   return $schema;
 }
 
@@ -240,6 +361,133 @@ function ces_offerswants_update_7100() {
 }
 
 /**
+ * Implements hook_update_N().
+ */
+function ces_offerswants_update_7101() {
+  $schema['ces_alerts'] = array(
+    'description' => 'Table for offers&wants alerts of each exchange.',
+    'fields' => array(
+      'id' => array(
+        'description' => 'Primary Key: Unique alert ID.',
+        'type' => 'serial',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+      ),
+      'exchange' => array(
+        'description' => 'The {ces_exchange}.id of the alerts.',
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'default' => 0,
+      ),
+      'ow_expired' => array(
+        'description' => 'Enabled/disabled alert offerwant expired.',
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 1,
+      ),
+      'ow_expired_lasttime' => array(
+        'description' => 'Last time cron runs alert offerwant expired, as a Unix timestamp.',
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 0,
+      ),
+      'ow_expired_noalertusers' => array(
+        'description' => 'Users not to send alert offerwant expired.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'serialize' => TRUE,
+      ),
+      'newoffer' => array(
+        'description' => 'Enabled/disabled alert newoffer.',
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 1,
+      ),
+      'newoffer_emaillist' => array(
+        'description' => 'List of other emails to send alert newoffer.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'serialize' => TRUE,
+      ),
+      'newoffer_noalertusers' => array(
+        'description' => 'Users not to send alert newoffer.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'serialize' => TRUE,
+      ),
+      'newwant' => array(
+        'description' => 'Enabled/disabled alert newwant.',
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 1,
+      ),
+      'newwant_emaillist' => array(
+        'description' => 'List of other emails to send alert newwant.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'serialize' => TRUE,
+      ),
+      'newwant_noalertusers' => array(
+        'description' => 'Users not to send alert newwant.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'serialize' => TRUE,
+      ),
+      'offers_periodical' => array(
+        'description' => 'Alert offers periodical: disabled(0), weekly(1), biweekly(2), monthly(3), bimonthly(4).',
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 1,
+      ),
+      'offers_periodical_emaillist' => array(
+        'description' => 'List of other emails to send alert offers periodical.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'serialize' => TRUE,
+      ),
+      'offers_periodical_noalertusers' => array(
+        'description' => 'Users not to send alert offers periodical.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'serialize' => TRUE,
+      ),
+      'wants_periodical' => array(
+        'description' => 'Alert wants periodical: disabled(0), weekly(1), biweekly(2), monthly(3), bimonthly(4).',
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 1,
+      ),
+      'wants_periodical_emaillist' => array(
+        'description' => 'List of other emails to send alert wants periodical.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'serialize' => TRUE,
+      ),
+      'wants_periodical_noalertusers' => array(
+        'description' => 'Users not to send alert wants periodical.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'serialize' => TRUE,
+      ),
+      'created' => array(
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'The time that the alerts for this exchange were created, as a Unix timestamp.',
+      ),
+    ),
+    'primary key' => array('id'),
+  );
+  db_create_table('ces_alerts', $schema['ces_alerts']);
+}
+/**
  * Implements hook_install().
  */
 function ces_offerswants_install() {
diff --git a/ces_offerswants/ces_offerswants.module b/ces_offerswants/ces_offerswants.module
index 5852373..63a0b9c 100644
--- a/ces_offerswants/ces_offerswants.module
+++ b/ces_offerswants/ces_offerswants.module
@@ -402,6 +402,15 @@ function ces_offerswants_menu() {
     'page arguments' => array(4),
     'access callback' => TRUE,
   );
+    $menu['ces/admin/alerts'] = array(
+    'title' => 'Email alerts',
+    'description' => 'Preferences about offers and wants email alerts',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('ces_category_form'),
+    'access callback' => 'ces_bank_access',
+    'access arguments' => array('edit', 'exchange', CES_BANK_CURRENT_EXCHANGE),
+    'type' => MENU_NORMAL_ITEM,
+  );
   return $menu;
 }
 /**
@@ -2177,6 +2186,10 @@ function ces_offerswants_token_info() {
           'name' => t('Title'),
           'description' => t('Title of offer.'),
         ),
+        'type' => array(
+          'name' => t('Type'),
+          'description' => t('Type of offer: offer or want.'),
+        ),
       ),
       'notify' => array(
         'body' => array(
@@ -2211,6 +2224,9 @@ function ces_offerswants_tokens($type, $tokens, array $data = array(), array $op
         case 'id':
           $replacements[$original] = $sanitize ? check_plain($offer['id']) : $offer['id'];
           break;
+        case 'type':
+          $replacements[$original] = $sanitize ? check_plain($offer->type) : $offer->type;
+          break;
       }
     }
   }
