diff --git a/Changelog.md b/Changelog.md
index 3382cde..74f1b35 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -8,6 +8,7 @@ This file holds the changelog for Pepperminty Wiki. This is the master list of t
      - Another search index rebuild is required
  - Optimisation: Don't generate the list of pages for the datalist if it isn't going to be displayed (especially noticeable on wikis with lots of pages)
  - Optimisation: Don't load the statistics index if it's not needed (also esp. noticeable on wikis with lots of pages)
+ - [Module Api] Optimisation: Remove `search::transliterate` because it has a huge overhead. Use `search::$literator->transliterate()` instead.
 
 ## v0.20
 _Just 1 change since the previous beta release._
diff --git a/module_index.json b/module_index.json
index 48c5eea..feb40dc 100755
--- a/module_index.json
+++ b/module_index.json
@@ -132,20 +132,20 @@
     {
         "id": "feature-search",
         "name": "Search",
-        "version": "0.10.1",
+        "version": "0.11",
         "author": "Starbeamrainbowlabs",
         "description": "Adds proper search functionality to Pepperminty Wiki using an inverted index to provide a full text search engine. If pages don't show up, then you might have hit a stop word. If not, try requesting the `invindex-rebuild` action to rebuild the inverted index from scratch.",
-        "lastupdate": 1575675114,
+        "lastupdate": 1575838820,
         "optional": false,
         "extra_data": []
     },
     {
         "id": "feature-stats",
         "name": "Statistics",
-        "version": "0.2.2",
+        "version": "0.3",
         "author": "Starbeamrainbowlabs",
         "description": "An extensible statistics calculation system. Comes with a range of built-in statistics, but can be extended by other modules too.",
-        "lastupdate": 1575837611,
+        "lastupdate": 1575837905,
         "optional": false,
         "extra_data": []
     },
diff --git a/modules/feature-search.php b/modules/feature-search.php
index 0faf3c4..700d1a4 100644
--- a/modules/feature-search.php
+++ b/modules/feature-search.php
@@ -1,7 +1,7 @@
 <?php
 register_module([
 	"name" => "Search",
-	"version" => "0.10.1",
+	"version" => "0.11",
 	"author" => "Starbeamrainbowlabs",
 	"description" => "Adds proper search functionality to Pepperminty Wiki using an inverted index to provide a full text search engine. If pages don't show up, then you might have hit a stop word. If not, try requesting the `invindex-rebuild` action to rebuild the inverted index from scratch.",
 	"id" => "feature-search",
@@ -443,7 +443,7 @@ register_module([
 				exit("Error: The type '$type' is not one of the supported output types. Available values: json, opensearch. Default: json");
 			}
 			
-			$query = search::transliterate($_GET["query"]);
+			$query = search::$literator->transliterate($_GET["query"]);
 			
 			// Rank each page name
 			$results = [];
@@ -451,7 +451,7 @@ register_module([
 				$results[] = [
 					"pagename" => $pageName,
 					// Costs: Insert: 1, Replace: 8, Delete: 6
-					"distance" => levenshtein($query, search::transliterate($pageName), 1, 8, 6)
+					"distance" => levenshtein($query, search::$literator->transliterate($pageName), 1, 8, 6)
 				];
 			}
 			
@@ -782,23 +782,23 @@ class search
 	 */
 	private static $invindex = null;
 	/**
-	 * Cache variable for the transliterator instance used by search::transliterate.
+	 * The transliterator that can be used to transliterate strings.
+	 * Transliterated strings are more suitable for use with the search index.
+	 * Note that this is no longer wrapped in a function as of v0.21 for 
+	 * performance reasons.
 	 * @var Transliterator
 	 */
-	private static $literator = null;
+	public static $literator = null;
 	
 	/**
-	 * Transliterates a string to make it more suitable for entry into the search index.
-	 * @param  string $str The string to transliterate.
-	 * @return string      The transliterated string.
+	 * Initialises the search system.
+	 * Do not call this function! It is called automatically.
 	 */
-	public static function transliterate(string $str) : string {
-		if(self::$literator == null)
-			self::$literator = Transliterator::createFromRules(':: Any-Latin; :: Latin-ASCII; :: NFD; :: [:Nonspacing Mark:] Remove; :: Lower(); :: NFC;', Transliterator::FORWARD);
-		
-		return self::$literator->transliterate($str);
+	public static function init() {
+		self::$literator = Transliterator::createFromRules(':: Any-Latin; :: Latin-ASCII; :: NFD; :: [:Nonspacing Mark:] Remove; :: Lower(); :: NFC;', Transliterator::FORWARD);
 	}
 	
+	
 	/**
 	 * Converts a source string into an index of search terms that can be
 	 * merged into an inverted index.
@@ -843,7 +843,7 @@ class search
 		// We don't need to normalise here because the transliterator handles 
 		// this for us. Also, we can't move the literator to a static member 
 		// variable because PHP doesn't like it very much
-		$source = self::transliterate($source);
+		$source = self::$literator->transliterate($source);
 		$source = preg_replace('/[\[\]\|\{\}\/]/u', " ", $source);
 		return preg_split("/((^\p{P}+)|(\p{P}*\s+\p{P}*)|(\p{P}+$))|\|/u", $source, -1, $flags);
 	}
@@ -1071,7 +1071,7 @@ class search
 	 * @param	string	$query	The queyr string to split.
 	 */
 	public function stas_split($query) {
-		$chars = str_split(self::transliterate($query));
+		$chars = str_split(self::$literator->transliterate($query));
 		$terms = [];
 		$next_term = "";
 		$toggle_state = false; // true = now inside, false = now outside
@@ -1218,7 +1218,7 @@ class search
 		global $settings, $pageindex;
 		
 		$query_stas = self::stas_parse(
-			self::stas_split(self::transliterate($query))
+			self::stas_split(self::$literator->transliterate($query))
 		);
 		
 		/* Sub-array format:
@@ -1290,8 +1290,8 @@ class search
 				// Setup a variable to hold the current page's id
 				$pageid = null; // Cache the page id
 				
-				$lit_title = self::transliterate($pagename);
-				$lit_tags = isset($pagedata->tags) ? self::transliterate(implode(" ", $pagedata->tags)) : null;
+				$lit_title = self::$literator->transliterate($pagename);
+				$lit_tags = isset($pagedata->tags) ? self::$literator->transliterate(implode(" ", $pagedata->tags)) : null;
 				
 				// Make sure that the title & tags don't contain a term we should exclude
 				$skip = false;
@@ -1489,5 +1489,7 @@ class search
 		return $context;
 	}
 }
+// Run the init function
+search::init();
 
 ?>
