diff --git a/dict/main.go b/dict/main.go
index 5234d26..b234102 100644
--- a/dict/main.go
+++ b/dict/main.go
@@ -13,7 +13,7 @@ import (
 	"github.com/gorilla/mux"
 )
 
-var dict jmdict.Jmdict
+var dict map[string]Entry
 
 func LoadDict() error {
 	const jmdictFile = "JMdict.xml"
@@ -21,10 +21,15 @@ func LoadDict() error {
 	if err != nil {
 		return err
 	}
-	dict, _, err = jmdict.LoadJmdict(reader)
+	jmdict, _, err := jmdict.LoadJmdict(reader)
 	if err != nil {
 		return err
 	}
+	dict = make(map[string]Entry)
+	for _, jmdictEntry := range jmdict.Entries {
+		entry := ParseEntry(&jmdictEntry)
+		dict[entry.Kanji] = entry
+	}
 	return nil
 }
 
@@ -39,7 +44,7 @@ type Definition struct {
 	PartOfSpeech []string
 }
 
-func ParseEntry(entry jmdict.JmdictEntry) Entry {
+func ParseEntry(entry *jmdict.JmdictEntry) Entry {
 	kanji := ""
 	if len(entry.Kanji) > 0 {
 		kanji = entry.Kanji[0].Expression
@@ -75,26 +80,22 @@ func Search(query string) queryResult {
 	otherResults := make([]Entry, 0)
 	truncated := false
 	count := 0
-	for _, jmdictEntry := range dict.Entries {
+	for kanji := range dict {
 		exactMatch := false
-		for _, kanji := range jmdictEntry.Kanji {
-			if kanji.Expression == query {
-				exactMatch = true
-				goto match
-			}
-			if strings.Contains(kanji.Expression, query) {
-				goto match
-			}
+		entry := dict[kanji]
+		if kanji == query {
+			exactMatch = true
+			goto match
+		}
+		if strings.Contains(kanji, query) {
+			goto match
 		}
 		// TODO: Skip if query contains kanji
-		for _, reading := range jmdictEntry.Readings {
-			if strings.Contains(reading.Reading, query) {
-				goto match
-			}
+		if strings.Contains(entry.Reading, query) {
+			goto match
 		}
 		continue
 	match:
-		entry := ParseEntry(jmdictEntry)
 		if exactMatch {
 			exactResults = append(exactResults, entry)
 		} else {
@@ -116,9 +117,8 @@ func Search(query string) queryResult {
 }
 
 func Lookup(word string) *Entry {
-	for _, jmdictEntry := range dict.Entries {
-		entry := ParseEntry(jmdictEntry)
-		if entry.Kanji == word {
+	for kanji, entry := range dict {
+		if kanji == word {
 			return &entry
 		}
 	}