diff --git a/app/models/account.rb b/app/models/account.rb
index 9999f05dd0077ab673dce3f58ef1ec189940e7c9..cb186b4659f8f9befc52fd4e0813a36d5c71fc18 100644
--- a/app/models/account.rb
+++ b/app/models/account.rb
@@ -1,7 +1,7 @@
 class Account < ApplicationRecord
   include Targetable
 
-  MENTION_RE = /(?:^|\s|\.|>)@([a-z0-9_]+(?:@[a-z0-9\.\-]+)?)/i
+  MENTION_RE = /(?:^|[\s\.>*+])@([a-z0-9_]+(?:@[a-z0-9\.\-]+)?)/i
   IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze
 
   # Local users
diff --git a/app/services/process_hashtags_service.rb b/app/services/process_hashtags_service.rb
index 8c68ce9898a6ab2b37333dd9b2fd90838ab5453f..df30f73ae86d5896f0c026e2a21f079105ca79b0 100644
--- a/app/services/process_hashtags_service.rb
+++ b/app/services/process_hashtags_service.rb
@@ -4,7 +4,7 @@ class ProcessHashtagsService < BaseService
       tags = status.text.scan(Tag::HASHTAG_RE).map(&:first)
     end
 
-    tags.map(&:downcase).each do |tag|
+    tags.map(&:downcase).uniq.each do |tag|
       status.tags << Tag.where(name: tag).first_or_initialize(name: tag)
     end
   end
diff --git a/spec/controllers/tags_controller_spec.rb b/spec/controllers/tags_controller_spec.rb
index f433cf271c0c0ae2c8c086d772e1c268f416e80b..92e25e03b4fbed7f6d2d2029214ec91ca68908db 100644
--- a/spec/controllers/tags_controller_spec.rb
+++ b/spec/controllers/tags_controller_spec.rb
@@ -3,6 +3,10 @@ require 'rails_helper'
 RSpec.describe TagsController, type: :controller do
 
   describe 'GET #show' do
+    before do
+      Fabricate(:tag, name: 'test')
+    end
+
     it 'returns http success' do
       get :show, params: { id: 'test' }
       expect(response).to have_http_status(:success)