diff --git a/src/OutputFilter.php b/src/OutputFilter.php
index <HASH>..<HASH> 100644
--- a/src/OutputFilter.php
+++ b/src/OutputFilter.php
@@ -154,18 +154,10 @@ class OutputFilter
 	 * @return  string  Processed string.
 	 *
 	 * @since   1.0
-	 * @todo    There must be a better way???
 	 */
 	public static function ampReplace($text)
 	{
-		$text = str_replace('&&', '*--*', $text);
-		$text = str_replace('&#', '*-*', $text);
-		$text = str_replace('&amp;', '&', $text);
-		$text = preg_replace('|&(?![\w]+;)|', '&amp;', $text);
-		$text = str_replace('*-*', '&#', $text);
-		$text = str_replace('*--*', '&&', $text);
-
-		return $text;
+		return preg_replace('/(?<!&)&(?!&|#|[\w]+;)/', '&amp;', $text);
 	}
 
 	/**
use negative lookbehind/lookahed instead of a lot of str_replaces