diff --git a/app/models/topic_user.rb b/app/models/topic_user.rb
index 4ff10541f..e8306e8b0 100644
--- a/app/models/topic_user.rb
+++ b/app/models/topic_user.rb
@@ -87,6 +87,8 @@ class TopicUser < ActiveRecord::Base
           end
 
           TopicUser.create(attrs.merge!(user_id: user_id, topic_id: topic_id.to_i, first_visited_at: now ,last_visited_at: now))
+        else
+          observe_after_save_callbacks_for topic_id, user_id
         end
       end
     rescue ActiveRecord::RecordNotUnique
@@ -98,6 +100,8 @@ class TopicUser < ActiveRecord::Base
       rows = TopicUser.update_all({last_visited_at: now}, {topic_id: topic.id, user_id: user.id})
       if rows == 0
         TopicUser.create(topic_id: topic.id, user_id: user.id, last_visited_at: now, first_visited_at: now)
+      else
+        observe_after_save_callbacks_for topic.id, user.id
       end
     end
 
@@ -173,6 +177,11 @@ class TopicUser < ActiveRecord::Base
       end
     end
 
+    def observe_after_save_callbacks_for(topic_id, user_id)
+      TopicUser.where(topic_id: topic_id, user_id: user_id).each do |topic_user|
+        UserActionObserver.instance.after_save topic_user
+      end
+    end
   end
 
   def self.ensure_consistency!
diff --git a/spec/models/topic_user_spec.rb b/spec/models/topic_user_spec.rb
index eeb7f6539..0a67ea6d3 100644
--- a/spec/models/topic_user_spec.rb
+++ b/spec/models/topic_user_spec.rb
@@ -107,6 +107,10 @@ describe TopicUser do
       topic_user.last_visited_at.to_i.should == today.to_i
     end
 
+    it 'triggers the observer callbacks when updating' do
+      UserActionObserver.instance.expects(:after_save).twice
+      2.times { TopicUser.track_visit!(topic, user) }
+    end
   end
 
   describe 'read tracking' do
@@ -186,6 +190,11 @@ describe TopicUser do
       }.should change(TopicUser, :count).by(1)
     end
 
+    it 'triggers the observer callbacks when updating' do
+      UserActionObserver.instance.expects(:after_save).twice
+      3.times { TopicUser.change(user, topic.id, starred: true) }
+    end
+
     describe 'after creating a row' do
       before do
         TopicUser.change(user, topic.id, starred: true)