diff --git a/hamster/__init__.py b/hamster/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..42f577971774e14c4d0b98c71247401aefd6da5c
--- /dev/null
+++ b/hamster/__init__.py
@@ -0,0 +1 @@
+from hamster import HamsterIntegrationPlugin
diff --git a/hamster/hamster.py b/hamster/hamster.py
new file mode 100644
index 0000000000000000000000000000000000000000..c720db23d7fb1fc7d0506f213908b4297536f542
--- /dev/null
+++ b/hamster/hamster.py
@@ -0,0 +1,112 @@
+# -*- coding: utf-8 -*-
+
+import dbus
+import gobject
+import datetime as dt
+from common import gajim
+from common import ged
+from common import dbus_support
+
+from plugins import GajimPlugin
+from plugins.helpers import log_calls, log
+from common.pep import ACTIVITIES
+
+HAMSTAER_INTERFACE = 'org.gnome.Hamster'
+SUBACTIVITIES = []
+subactivity_ = [ACTIVITIES[x].keys() for x in ACTIVITIES.keys()]
+for x in subactivity_ :
+    SUBACTIVITIES = SUBACTIVITIES + x
+SUBACTIVITIES = set(SUBACTIVITIES)
+SUBACTIVITIES.remove('category')
+XMPP_ACTIVITIES = set(ACTIVITIES.keys())
+
+class HamsterIntegrationPlugin(GajimPlugin):
+
+    @log_calls('HamsterIntegrationPlugin')
+    def init(self):
+        self.description = _('Integration with project hamster\n'
+        'see https://trac.gajim.org/ticket/6993\n'
+        'and http://projecthamster.wordpress.com/about/')
+        self.config_dialog = None
+        self.events_handlers = {}
+
+    @log_calls('HamsterIntegrationPlugin')
+    def activate(self):
+        if not dbus_support.supported:
+            return
+
+        self.bus = dbus_support.session_bus.SessionBus()
+        try:
+            self.session_presence = self.bus.get_object(HAMSTAER_INTERFACE,
+                '/org/gnome/Hamster')
+        except:
+            gajim.log.debug('Hamster D-Bus service not found')
+            return
+
+        self.active = True
+        self.bus.add_signal_receiver(self.hamster_facts_changed, 'FactsChanged',
+            HAMSTAER_INTERFACE)
+        gajim.ged.register_event_handler('our-show', ged.POSTGUI,
+            self.on_our_status)
+        self.pep_dict ={}
+
+    @log_calls('HamsterIntegrationPlugin')
+    def deactivate(self):
+        if not dbus_support.supported or not self.active:
+            return
+
+        self.active = False
+        self.bus.remove_signal_receiver(self.hamster_facts_changed, "FactsChanged",
+                                        dbus_interface=HAMSTAER_INTERFACE)
+
+    def hamster_facts_changed(self, *args, **kw):
+        # get hamster tags
+        facts = self.session_presence.GetTodaysFacts(
+            dbus_interface=HAMSTAER_INTERFACE)
+
+        if self.from_dbus_fact(facts[-1])['end_time']:
+            accounts = gajim.connections.keys()
+            for account in accounts:
+                if gajim.account_is_connected(account):
+                    connection = gajim.connections[account]
+                    connection.retract_activity()
+            return
+
+        last_fact = self.from_dbus_fact(facts[-1])
+        tags = set(last_fact['tags'])
+
+        activity = "Other"
+        activity_candidates = XMPP_ACTIVITIES.intersection(tags)
+        if len(activity_candidates) >= 1:
+            activity=list(activity_candidates)[0]
+        subactivity = 'other'
+        subactivity_candidates = SUBACTIVITIES.intersection(tags)
+        if len(subactivity_candidates) >= 1:
+            subactivity=list(subactivity_candidates)[0]
+
+        # send activity
+        accounts = gajim.connections.keys()
+        for account in accounts:
+            if gajim.account_is_connected(account):
+                connection = gajim.connections[account]
+                connection.send_activity(activity, subactivity,
+                    last_fact['fact'])
+
+    def from_dbus_fact(self, fact):
+        '''unpack the struct into a proper dict'''
+        return dict(fact = fact[4],
+            start_time  = dt.datetime.utcfromtimestamp(fact[1]),
+            end_time = dt.datetime.utcfromtimestamp(fact[2]) if fact[2] else None,
+            description = fact[3],
+            activity_id = fact[5],
+            category = fact[6],
+            tags = fact[7],
+            date = dt.datetime.utcfromtimestamp(fact[8]).date(),
+            delta = dt.timedelta(days = fact[9] // (24 * 60 * 60),
+            seconds = fact[9] % (24 * 60 * 60)),
+            id = fact[0])
+
+    def on_our_status(self, network_event):
+        gajim.ged.remove_event_handler('our-show', ged.POSTGUI,
+            self.on_our_status)
+        gobject.timeout_add(10000, self.hamster_facts_changed)
diff --git a/hamster/manifest.ini b/hamster/manifest.ini
new file mode 100644
index 0000000000000000000000000000000000000000..f9e457dd3a0db820eddab81f77f22d81c9c92272
--- /dev/null
+++ b/hamster/manifest.ini
@@ -0,0 +1,9 @@
+[info]
+name: Hamstar integration
+short_name: hamstar_integration
+version: 0.1
+description: Integration with project hamster
+ see https://trac.gajim.org/ticket/6993
+ and http://projecthamster.wordpress.com/about/
+authors: Denis Fomin <fominde@gmail.com>
+homepage: http://trac-plugins.gajim.org/wiki/