diff --git a/juick/manifest.ini b/juick/manifest.ini
index 5f82317e2fa1e76a0ccbdfdef7fb85eb78cb0ee3..c7b8e5a7a1ebaf04f0206b515f311f0043c45643 100644
--- a/juick/manifest.ini
+++ b/juick/manifest.ini
@@ -1,7 +1,7 @@
 [info]
 name: Juick
 short_name: Juick
-version: 0.4
+version: 0.5
 description: Clickable juick links , juick nics, preview juick picturs.
  The key combination alt + up in the textbox allow insert the number of last message (comment or topic).
 authors: Denis Fomin <fominde@gmail.com>, evgen <drujebober@gmail.com>
diff --git a/juick/plugin.py b/juick/plugin.py
index 59f9378328285a09320f1fe3bfac98cfba6946ca..7e17106597aaea1dfed2c7aa25a4696e3af09119 100644
--- a/juick/plugin.py
+++ b/juick/plugin.py
@@ -10,6 +10,7 @@ from string import upper
 from string import rstrip
 import locale
 import sqlite3
+import gobject
 
 from common import helpers
 from common import gajim
@@ -31,7 +32,9 @@ class JuickPlugin(GajimPlugin):
         self.config_dialog = JuickPluginConfigDialog(self)
         self.gui_extension_points = {
                 'chat_control_base': (self.connect_with_chat_control,
-                                       self.disconnect_from_chat_control)}
+                                       self.disconnect_from_chat_control),
+                'print_special_text': (self.print_special_text,
+                                       self.print_special_text1),}
         self.config_default_values = {'SHOW_AVATARS': (False, ''),
                     'AVATAR_SIZE': (20, 'Avatar size(10-32)'),
                     'avatars_old': (2419200, 'Update avatars '
@@ -78,6 +81,18 @@ class JuickPlugin(GajimPlugin):
         self.controls = []
         self.conn.close()
 
+    def print_special_text(self, tv, special_text, other_tags, graphics=True):
+        for control in self.controls:
+            if control.chat_control.conv_textview != tv:
+                continue
+            control.print_special_text(special_text, other_tags, graphics=True)
+
+    def print_special_text1(self, chat_control, special_text, other_tags=None,
+        graphics=True):
+        for control in self.controls:
+            if control.chat_control == chat_control:
+                control.disconnect_from_chat_control()
+                self.controls.remove(control)
 
 class Base(object):
     def __init__(self, plugin, chat_control):
@@ -124,9 +139,6 @@ class Base(object):
         self.create_tag_menu()
         self.create_buttons()
 
-        self.old_print_special_text = self.textview.print_special_text
-        self.textview.print_special_text = self.print_special_text
-
     def create_patterns(self):
         self.juick_post_uid = self.juick_nick = ''
         self.juick_post_re = re.compile(r'#(\d+)')
@@ -308,19 +320,21 @@ class Base(object):
             buffer_, iter_, tag = self.get_iter_and_tag('sharp_slash')
             buffer_.insert_with_tags(iter_, special_text, tag)
             self.last_juick_num = special_text
+            self.textview.plugin_modified = True
             return
         if gajim.interface.juick_nick_re.match(special_text):
             # insert juick nick @nickname////
             if not self.plugin.config['SHOW_AVATARS']:
+                self.textview.plugin_modified = True
                 return
             buffer_, iter_, tag = self.get_iter_and_tag('juick_nick')
             mark = buffer_.create_mark(None, iter_, True)
             nick = special_text[1:].rstrip(':')
-            # insert juick nick
             buffer_.insert_with_tags(iter_, special_text, tag)
             # insert avatars
             conn = gajim.connections[self.chat_control.account]
             if not conn.connected:
+                self.textview.plugin_modified = True
                 return
             # search id in the db
             query = "select nick, id from person where nick = :nick"
@@ -330,6 +344,7 @@ class Base(object):
                 # nick in the db
                 pixbuf = self.get_avatar(db_item[1], nick, True)
                 if not pixbuf:
+                    self.textview.plugin_modified = True
                     return
                 end_iter = buffer_.get_iter_at_mark(mark)
                 anchor = buffer_.create_child_anchor(end_iter)
@@ -337,6 +352,7 @@ class Base(object):
                 img.set_from_pixbuf(pixbuf)
                 img.show()
                 self.textview.tv.add_child_at_anchor(img, anchor)
+                self.textview.plugin_modified = True
                 return
             else:
                 # nick not in the db
@@ -350,6 +366,7 @@ class Base(object):
                 iq.setID(id_)
                 conn.connection.SendAndCallForResponse(iq, self._on_response,
                     {'mark': mark, 'special_text': special_text})
+                self.textview.plugin_modified = True
                 return
         if gajim.interface.juick_pic_re.match(special_text) and \
             self.plugin.config['SHOW_PREVIEW']:
@@ -359,19 +376,20 @@ class Base(object):
             buffer_.insert_with_tags(iter_, special_text, tag)
             uid = special_text.split('/')[-1]
             url = "http://i.juick.com/photos-512/%s" % uid
-            pixbuf = self.get_pixbuf_from_url( url, self.plugin.config[
-                'PREVIEW_SIZE'])
-            if pixbuf:
-                # insert image
-                buffer_ = mark.get_buffer()
-                end_iter = buffer_.get_iter_at_mark(mark)
-                anchor = buffer_.create_child_anchor(end_iter)
-                img = TextViewImage(anchor, special_text)
-                img.set_from_pixbuf(pixbuf)
-                img.show()
-                self.textview.tv.add_child_at_anchor(img, anchor)
-        else:
-            self.old_print_special_text(special_text, other_tags, graphics)
+            gobject.idle_add(self.insert_pic_preview, mark, special_text, url)
+
+    def insert_pic_preview(self, mark, special_text, url):
+        pixbuf = self.get_pixbuf_from_url( url, self.plugin.config[
+            'PREVIEW_SIZE'])
+        if pixbuf:
+            # insert image
+            buffer_ = mark.get_buffer()
+            end_iter = buffer_.get_iter_at_mark(mark)
+            anchor = buffer_.create_child_anchor(end_iter)
+            img = TextViewImage(anchor, special_text)
+            img.set_from_pixbuf(pixbuf)
+            img.show()
+            self.textview.tv.add_child_at_anchor(img, anchor)
 
     def get_iter_and_tag(self, tag_name):
         buffer_ = self.textview.tv.get_buffer()
@@ -565,7 +583,6 @@ class Base(object):
             helpers.launch_browser_mailer('url', url)
 
     def disconnect_from_chat_control(self):
-        self.textview.print_special_text = self.old_print_special_text
         buffer_ = self.textview.tv.get_buffer()
         tag_table = buffer_.get_tag_table()
         if tag_table.lookup('sharp_slash'):