diff --git a/lib/html2haml/html.rb b/lib/html2haml/html.rb
index <HASH>..<HASH> 100644
--- a/lib/html2haml/html.rb
+++ b/lib/html2haml/html.rb
@@ -388,9 +388,9 @@ module Haml
       def to_haml_filter(filter, tabs, options)
         content =
           if children.first.cdata?
-            children.first.content_without_cdata_tokens
+            decode_entities(children.first.content_without_cdata_tokens)
           else
-            CGI.unescapeHTML(self.inner_text)
+            decode_entites(self.inner_text)
           end
 
         content = erb_to_interpolation(content, options)
@@ -411,6 +411,17 @@ module Haml
         "#{tabulate(tabs)}:#{filter}\n#{content}"
       end
 
+      # TODO: this method is utterly awful, find a better way to decode HTML entities.
+      def decode_entities(str)
+        str.gsub(/&[\S]+;/) do |entity|
+          begin
+            [Nokogiri::HTML::NamedCharacters[entity[1..-2]]].pack("C")
+          rescue TypeError
+            entity
+          end
+        end
+      end
+
       def static_attribute?(name, options)
         attr_hash[name] && !dynamic_attribute?(name, options)
       end
Decode HTML entities in filter content

Note that the implementation her is pretty awful, it should be replaced
with something better when possible. However it does, for the moment,
solve the problem at hand.