diff --git a/app/models/post.rb b/app/models/post.rb
index 98842c916..ae977efcd 100644
--- a/app/models/post.rb
+++ b/app/models/post.rb
@@ -4,6 +4,7 @@ require_dependency 'rate_limiter'
 require_dependency 'post_revisor'
 require_dependency 'enum'
 require_dependency 'trashable'
+require_dependency 'post_analyser'
 
 require 'archetype'
 require 'digest/sha1'
@@ -11,6 +12,7 @@ require 'digest/sha1'
 class Post < ActiveRecord::Base
   include RateLimiter::OnCreateRecord
   include Trashable
+  include PostAnalyser
 
   versioned if: :raw_changed?
 
@@ -114,29 +116,6 @@ class Post < ActiveRecord::Base
     end.count
   end
 
-  # Returns an array of all links in a post
-  def raw_links
-    return [] unless raw.present?
-
-    return @raw_links if @raw_links.present?
-
-    # Don't include @mentions in the link count
-    @raw_links = []
-    cooked_document.search("a[href]").each do |l|
-      html_class = l.attributes['class']
-      url = l.attributes['href'].to_s
-      if html_class.present?
-        next if html_class.to_s == 'mention' && l.attributes['href'].to_s =~ /^\/users\//
-      end
-      @raw_links << url
-    end
-    @raw_links
-  end
-
-  # How many links are present in the post
-  def link_count
-    raw_links.size
-  end
 
   # Sometimes the post is being edited by someone else, for example, a mod.
   # If that's the case, they should not be bound by the original poster's
@@ -168,22 +147,6 @@ class Post < ActiveRecord::Base
     add_error_if_count_exceeded(:too_many_links, link_count, SiteSetting.newuser_max_links) unless acting_user_is_trusted?
   end
 
-
-  # Count how many hosts are linked in the post
-  def linked_hosts
-    return {} if raw_links.blank?
-
-    return @linked_hosts if @linked_hosts.present?
-
-    @linked_hosts = {}
-    raw_links.each do |u|
-      uri = URI.parse(u)
-      host = uri.host
-      @linked_hosts[host] ||= 1
-    end
-    @linked_hosts
-  end
-
   def total_hosts_usage
     hosts = linked_hosts.clone
 
@@ -208,23 +171,6 @@ class Post < ActiveRecord::Base
     false
   end
 
-
-  def raw_mentions
-    return [] if raw.blank?
-
-    # We don't count mentions in quotes
-    return @raw_mentions if @raw_mentions.present?
-    raw_stripped = raw.gsub(/\[quote=(.*)\]([^\[]*?)\[\/quote\]/im, '')
-
-    # Strip pre and code tags
-    doc = Nokogiri::HTML.fragment(raw_stripped)
-    doc.search("pre").remove
-    doc.search("code").remove
-
-    results = doc.to_html.scan(PrettyText.mention_matcher)
-    @raw_mentions = results.uniq.map { |un| un.first.downcase.gsub!(/^@/, '') }
-  end
-
   def archetype
     topic.archetype
   end
diff --git a/lib/post_analyser.rb b/lib/post_analyser.rb
new file mode 100644
index 000000000..e4f0f9d57
--- /dev/null
+++ b/lib/post_analyser.rb
@@ -0,0 +1,63 @@
+module PostAnalyser
+
+
+  def raw_mentions
+    return [] if raw.blank?
+
+    # We don't count mentions in quotes
+    return @raw_mentions if @raw_mentions.present?
+    raw_stripped = raw.gsub(/\[quote=(.*)\]([^\[]*?)\[\/quote\]/im, '')
+
+    # Strip pre and code tags
+    doc = Nokogiri::HTML.fragment(raw_stripped)
+    doc.search("pre").remove
+    doc.search("code").remove
+
+    results = doc.to_html.scan(PrettyText.mention_matcher)
+    @raw_mentions = results.uniq.map { |un| un.first.downcase.gsub!(/^@/, '') }
+  end
+
+  # Count how many hosts are linked in the post
+  def linked_hosts
+    return {} if raw_links.blank?
+
+    return @linked_hosts if @linked_hosts.present?
+
+    @linked_hosts = {}
+    raw_links.each do |u|
+      uri = URI.parse(u)
+      host = uri.host
+      @linked_hosts[host] ||= 1
+    end
+    @linked_hosts
+  end
+
+  # Returns an array of all links in a post excluding mentions
+  def raw_links
+    return [] unless raw.present?
+
+    return @raw_links if @raw_links.present?
+
+    # Don't include @mentions in the link count
+    @raw_links = []
+    cooked_document.search("a[href]").each do |l|
+      next if link_is_a_mention?(l)
+      url = l.attributes['href'].to_s
+      @raw_links << url
+    end
+    @raw_links
+  end
+
+  # How many links are present in the post
+  def link_count
+    raw_links.size
+  end
+
+  private
+
+  def link_is_a_mention?(l)
+    html_class = l.attributes['class']
+    return false if html_class.nil?
+    html_class.to_s == 'mention' && l.attributes['href'].to_s =~ /^\/users\//
+  end
+end