diff --git a/addons/crm/models/crm_lead.py b/addons/crm/models/crm_lead.py
index 7afd9367e1b724a827fec192896d862616f730a3..a8145e302eff2507df5618b783fadd7de871488c 100644
--- a/addons/crm/models/crm_lead.py
+++ b/addons/crm/models/crm_lead.py
@@ -1113,6 +1113,19 @@ class Lead(models.Model):
                 update_vals[key] = res.group(2).lower()
         return super(Lead, self).message_update(msg_dict, update_vals=update_vals)
 
+    def _message_post_after_hook(self, message):
+        if self.email_from and not self.partner_id:
+            # we consider that posting a message with a specified recipient (not a follower, a specific one)
+            # on a document without customer means that it was created through the chatter using
+            # suggested recipients. This heuristic allows to avoid ugly hacks in JS.
+            new_partner = message.partner_ids.filtered(lambda partner: partner.email == self.email_from)
+            if new_partner:
+                self.search([
+                    ('partner_id', '=', False),
+                    ('email_from', '=', new_partner.email),
+                    ('stage_id.fold', '=', False)]).write({'partner_id': new_partner.id})
+        return super(Lead, self)._message_post_after_hook(message)
+
     @api.multi
     def message_partner_info_from_emails(self, emails, link_mail=False):
         result = super(Lead, self).message_partner_info_from_emails(emails, link_mail=link_mail)
diff --git a/addons/crm/views/crm_lead_views.xml b/addons/crm/views/crm_lead_views.xml
index 6104de36b493578a164f402cfc4d607d0cf21100..f9b44044a2cc19e46fe10b26cb9ea2ab93371bf0 100644
--- a/addons/crm/views/crm_lead_views.xml
+++ b/addons/crm/views/crm_lead_views.xml
@@ -127,7 +127,7 @@
                 </sheet>
                 <div class="oe_chatter">
                     <field name="message_follower_ids" widget="mail_followers"/>
-                    <field name="message_ids" widget="mail_thread"/>
+                    <field name="message_ids" widget="mail_thread" options="{'post_refresh': 'recipients'}"/>
                 </div>
             </form>
         </field>
@@ -497,7 +497,7 @@
                     <div class="oe_chatter">
                         <field name="message_follower_ids" widget="mail_followers"/>
                         <field name="activity_ids" widget="mail_activity"/>
-                        <field name="message_ids" widget="mail_thread"/>
+                        <field name="message_ids" widget="mail_thread" options="{'post_refresh': 'recipients'}"/>
                     </div>
                 </form>
             </field>
diff --git a/addons/event/models/event.py b/addons/event/models/event.py
index de8117e0ceec7fcf62407f4406e3e43cfe9a94f7..c5c3e50a15792b5e77218ecec15f1c3065a25e85 100644
--- a/addons/event/models/event.py
+++ b/addons/event/models/event.py
@@ -447,6 +447,20 @@ class EventRegistration(models.Model):
             pass
         return recipients
 
+    def _message_post_after_hook(self, message):
+        if self.email and not self.partner_id:
+            # we consider that posting a message with a specified recipient (not a follower, a specific one)
+            # on a document without customer means that it was created through the chatter using
+            # suggested recipients. This heuristic allows to avoid ugly hacks in JS.
+            new_partner = message.partner_ids.filtered(lambda partner: partner.email == self.email)
+            if new_partner:
+                self.search([
+                    ('partner_id', '=', False),
+                    ('email', '=', new_partner.email),
+                    ('state', 'not in', ['cancel']),
+                ]).write({'partner_id': new_partner.id})
+        return super(EventRegistration, self)._message_post_after_hook(message)
+
     @api.multi
     def action_send_badge_email(self):
         """ Open a window to compose an email, with the template - 'event_badge'
diff --git a/addons/event/views/event_views.xml b/addons/event/views/event_views.xml
index 05995070924ceb4da64a6d49b1f35a8adc138b72..dab9536edac8f5765f2fa66468166cd8cd315946 100644
--- a/addons/event/views/event_views.xml
+++ b/addons/event/views/event_views.xml
@@ -499,7 +499,7 @@
                     </sheet>
                     <div class="oe_chatter">
                         <field name="message_follower_ids" widget="mail_followers"/>
-                        <field name="message_ids" widget="mail_thread"/>
+                        <field name="message_ids" widget="mail_thread" options="{'post_refresh': 'recipients'}"/>
                     </div>
                 </form>
             </field>
diff --git a/addons/hr_recruitment/models/hr_recruitment.py b/addons/hr_recruitment/models/hr_recruitment.py
index f5e164a4affb05bc7123c54be005fc5c339616a8..9302b9a5ce516cda0719b27c518db30f42f06cca 100644
--- a/addons/hr_recruitment/models/hr_recruitment.py
+++ b/addons/hr_recruitment/models/hr_recruitment.py
@@ -305,7 +305,6 @@ class Applicant(models.Model):
         }
         return res
 
-
     @api.multi
     def action_get_attachment_tree_view(self):
         attachment_action = self.env.ref('base.action_attachment')
@@ -377,6 +376,19 @@ class Applicant(models.Model):
             defaults.update(custom_values)
         return super(Applicant, self).message_new(msg, custom_values=defaults)
 
+    def _message_post_after_hook(self, message):
+        if self.email_from and not self.partner_id:
+            # we consider that posting a message with a specified recipient (not a follower, a specific one)
+            # on a document without customer means that it was created through the chatter using
+            # suggested recipients. This heuristic allows to avoid ugly hacks in JS.
+            new_partner = message.partner_ids.filtered(lambda partner: partner.email == self.email_from)
+            if new_partner:
+                self.search([
+                    ('partner_id', '=', False),
+                    ('email_from', '=', new_partner.email),
+                    ('stage_id.fold', '=', False)]).write({'partner_id': new_partner.id})
+        return super(Applicant, self)._message_post_after_hook(message)
+
     @api.multi
     def create_employee_from_applicant(self):
         """ Create an hr.employee from the hr.applicants """
diff --git a/addons/hr_recruitment/views/hr_recruitment_views.xml b/addons/hr_recruitment/views/hr_recruitment_views.xml
index f2269a9a991d20de1a8ed8477f57967478fc6573..27a3e33aab2bff5fe06c2fd17f16682971229849 100644
--- a/addons/hr_recruitment/views/hr_recruitment_views.xml
+++ b/addons/hr_recruitment/views/hr_recruitment_views.xml
@@ -159,7 +159,7 @@
             <div class="oe_chatter">
                 <field name="message_follower_ids" widget="mail_followers"/>
                 <field name="activity_ids" widget="mail_activity"/>
-                <field name="message_ids" widget="mail_thread"/>
+                <field name="message_ids" widget="mail_thread" options="{'post_refresh': 'recipients'}"/>
             </div>
           </form>
         </field>
diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py
index e9197a7292dfac72d95bed2ea2bba7d74d1932be..6d3b1f0fcc32d1f0454a8cd765a976fd795ef0c0 100644
--- a/addons/mail/models/mail_thread.py
+++ b/addons/mail/models/mail_thread.py
@@ -1894,8 +1894,14 @@ class MailThread(models.AbstractModel):
                 self.sudo().write({'message_last_post': fields.Datetime.now()})
         if new_message.author_id and model and self.ids and message_type != 'notification' and not self._context.get('mail_create_nosubscribe'):
             self.message_subscribe([new_message.author_id.id], force=False)
+
+        self._message_post_after_hook(new_message)
+
         return new_message
 
+    def _message_post_after_hook(self, message):
+        pass
+
     @api.multi
     def message_post_with_view(self, views_or_xmlid, **kwargs):
         """ Helper method to send a mail / post a message using a view_id to
diff --git a/addons/mail/static/src/js/chatter.js b/addons/mail/static/src/js/chatter.js
index da9c6eee5fadbc370f8736456da02c903eda8533..c799cf6a70aa41320bb9003710a7a544df91853e 100644
--- a/addons/mail/static/src/js/chatter.js
+++ b/addons/mail/static/src/js/chatter.js
@@ -58,6 +58,7 @@ var Chatter = Widget.extend(chat_mixin, {
             this.fields.thread = new ThreadField(this, mailFields.mail_thread, record, options);
             var nodeOptions = this.record.fieldsInfo.form[mailFields.mail_thread].options;
             this.hasLogButton = nodeOptions.display_log_button;
+            this.postRefresh = nodeOptions.post_refresh || 'never';
         }
     },
     start: function () {
@@ -158,7 +159,12 @@ var Chatter = Widget.extend(chat_mixin, {
                 self.composer.focus();
             }
             self.composer.on('post_message', self, function (message) {
-                self.fields.thread.postMessage(message).then(self._closeComposer.bind(self, true));
+                self.fields.thread.postMessage(message).then(function () {
+                    self._closeComposer(true);
+                    if (self.postRefresh === 'always' || (self.postRefresh === 'recipients' && message.partner_ids.length)) {
+                        self.trigger_up('reload');
+                    }
+                });
             });
             self.composer.on('need_refresh', self, self.trigger_up.bind(self, 'reload'));
             self.composer.on('close_composer', null, self._closeComposer.bind(self, true));
diff --git a/addons/mail/static/src/js/chatter_composer.js b/addons/mail/static/src/js/chatter_composer.js
index 340c82c349f0ad25259accbbc65b13e3a8ac915a..cd36e12768cdf59387897b4d3049d5de4ab01780 100644
--- a/addons/mail/static/src/js/chatter_composer.js
+++ b/addons/mail/static/src/js/chatter_composer.js
@@ -173,7 +173,7 @@ var ChatterComposer = composer.BasicComposer.extend({
                 var new_names_to_find = _.difference(names_to_find, names_to_remove);
                 var def;
                 if (new_names_to_find.length > 0) {
-                    self._rpc({
+                    def = self._rpc({
                             model: self.model,
                             method: 'message_partner_info_from_emails',
                             args: [[self.context.default_res_id], new_names_to_find, true],
diff --git a/addons/project_issue/models/project_issue.py b/addons/project_issue/models/project_issue.py
index 526225ac0964696fd79049e86f18dcc26db80752..5e4a8757d68914504862e718abfb187f92ac998c 100644
--- a/addons/project_issue/models/project_issue.py
+++ b/addons/project_issue/models/project_issue.py
@@ -327,6 +327,19 @@ class ProjectIssue(models.Model):
             self.sudo().write({'date_action_last': fields.Datetime.now()})
         return mail_message
 
+    def _message_post_after_hook(self, message):
+        if self.email_from and not self.partner_id:
+            # we consider that posting a message with a specified recipient (not a follower, a specific one)
+            # on a document without customer means that it was created through the chatter using
+            # suggested recipients. This heuristic allows to avoid ugly hacks in JS.
+            new_partner = message.partner_ids.filtered(lambda partner: partner.email == self.email_from)
+            if new_partner:
+                self.search([
+                    ('partner_id', '=', False),
+                    ('email_from', '=', new_partner.email),
+                    ('stage_id.fold', '=', False)]).write({'partner_id': new_partner.id})
+        return super(ProjectIssue, self)._message_post_after_hook(message)
+
     @api.multi
     def message_get_email_values(self, notif_mail=None):
         self.ensure_one()
diff --git a/addons/project_issue/views/project_issue_views.xml b/addons/project_issue/views/project_issue_views.xml
index b217f68c7b45460534fe2672ee9a4a9f22252827..383bead65dff21ec91a65a32d1783f1cbe137444 100644
--- a/addons/project_issue/views/project_issue_views.xml
+++ b/addons/project_issue/views/project_issue_views.xml
@@ -61,7 +61,7 @@
                 <div class="oe_chatter">
                     <field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/>
                     <field name="activity_ids" widget="mail_activity"/>
-                    <field name="message_ids" widget="mail_thread"/>
+                    <field name="message_ids" widget="mail_thread" options="{'post_refresh': 'recipients'}"/>
                 </div>
                 </form>
             </field>
diff --git a/addons/website_event_track/models/event_track.py b/addons/website_event_track/models/event_track.py
index 9b46b618d6e11fc001f1fe2e4458fd271a0dfbd5..7da7dc9395c2fc68716253f8ab8eae37dd2fd5c1 100644
--- a/addons/website_event_track/models/event_track.py
+++ b/addons/website_event_track/models/event_track.py
@@ -160,6 +160,20 @@ class Track(models.Model):
                 track._message_add_suggested_recipient(recipients, email=track.partner_email, reason=_('Speaker Email'))
         return recipients
 
+    def _message_post_after_hook(self, message):
+        if self.partner_email and not self.partner_id:
+            # we consider that posting a message with a specified recipient (not a follower, a specific one)
+            # on a document without customer means that it was created through the chatter using
+            # suggested recipients. This heuristic allows to avoid ugly hacks in JS.
+            new_partner = message.partner_ids.filtered(lambda partner: partner.email == self.partner_email)
+            if new_partner:
+                self.search([
+                    ('partner_id', '=', False),
+                    ('partner_email', '=', new_partner.email),
+                    ('stage_id.is_cancel', '=', False),
+                ]).write({'partner_id': new_partner.id})
+        return super(Track, self)._message_post_after_hook(message)
+
     @api.multi
     def open_track_speakers_list(self):
         return {
diff --git a/addons/website_event_track/views/event_track_views.xml b/addons/website_event_track/views/event_track_views.xml
index 0e10a43aa0c409c108f8bd0c4cf42d85aae37e69..1266f0a9d30162dd468826f4b05389d9b221adbc 100644
--- a/addons/website_event_track/views/event_track_views.xml
+++ b/addons/website_event_track/views/event_track_views.xml
@@ -154,7 +154,7 @@
                     <div class="oe_chatter">
                         <field name="message_follower_ids" widget="mail_followers"/>
                         <field name="activity_ids" widget="mail_activity"/>
-                        <field name="message_ids" widget="mail_thread"/>
+                        <field name="message_ids" widget="mail_thread" options="{'post_refresh': 'recipients'}"/>
                     </div>
                 </form>
             </field>