diff --git a/transliteration.inc b/transliteration.inc
index f09af6c..0d7b664 100644
--- a/transliteration.inc
+++ b/transliteration.inc
@@ -24,7 +24,7 @@
  * @return
  *   Transliterated text.
  */
-function _transliteration_process($string, $unknown = '?', $source_langcode = NULL) {
+function _transliteration_process($string, $context = array(), $unknown = '?', $source_langcode = NULL) {
   // ASCII is always valid NFC! If we're only ever given plain ASCII, we can
   // avoid the overhead of initializing the decomposition tables by skipping
   // out early.
@@ -66,6 +66,8 @@ function _transliteration_process($string, $unknown = '?', $source_langcode = NU
   // Chop the text into pure-ASCII and non-ASCII areas; large ASCII parts can
   // be handled much more quickly. Don't chop up Unicode areas for punctuation,
   // though, that wastes energy.
+  $context = module_invoke_all('transliteration_preproceed');
+  $string = strtr($string, $context);
   preg_match_all('/[\x00-\x7f]+|[\x80-\xff][\x00-\x40\x5b-\x5f\x7b-\xff]*/', $string, $matches);
 
   $result = '';
