diff --git a/geshifilter.pages.inc b/geshifilter.pages.inc
index 385a28f..4ab5ca4 100644
--- a/geshifilter.pages.inc
+++ b/geshifilter.pages.inc
@@ -226,6 +226,14 @@ function _geshifilter_process($format, $text) {
   // escape special (regular expression) characters in tags (for tags like 'c++' and 'c#')
   $tags = preg_replace('#(\\+|\\#)#', '\\\\$1', $tags);
   $tags_string = implode('|', $tags);
+  // Process any additional <foo>..</foo> blocks.
+  $tag_styles = array_filter(_geshifilter_tag_styles($format));
+  if (in_array(GESHIFILTER_BRACKETS_ANGLE, $tag_styles)) {
+    // Prepare <foo>..</foo> blocks.
+    $pattern = '#(<)('. $tags_string .')((\s+[^>]*)*)(>)(.*?)(</\2\s*>|$)#s';
+    $text = preg_replace_callback($pattern, create_function('$match', "return _geshifilter_prepare_callback(\$match, '$format');"), $text);
+    $text = preg_replace_callback($pattern, create_function('$match', "return _geshifilter_replace_callback(\$match, '$format');"), $text);
+  }
   // Pattern for matching the prepared "<code>...</code>" stuff
   $pattern = '#\\[geshifilter-('. $tags_string .')([^\\]]*)\\](.*?)(\\[/geshifilter-\1\\])#s';
   $text = preg_replace_callback($pattern, create_function('$match', "return _geshifilter_replace_callback(\$match, '$format');"), $text);
