diff --git a/dict/main.go b/dict/main.go
index 6b490d4..c358b2f 100644
--- a/dict/main.go
+++ b/dict/main.go
@@ -16,9 +16,15 @@ import (
 	"github.com/gorilla/mux"
 )
 
+var words []string // since iterating over map isn't the same every time
 var dict map[string]Entry
 
 func LoadDict() error {
+	type binaryData struct {
+		Words []string
+		Dict  map[string]Entry
+	}
+
 	// Loading from binary
 	const binaryFile = "dict.bin"
 	file, err := os.Open(binaryFile)
@@ -29,7 +35,10 @@ func LoadDict() error {
 	} else {
 		defer file.Close()
 		decoder := gob.NewDecoder(file)
-		err = decoder.Decode(&dict)
+		var data binaryData
+		err = decoder.Decode(&data)
+		words = data.Words
+		dict = data.Dict
 		return err
 	}
 
@@ -56,8 +65,9 @@ func LoadDict() error {
 		furiganaData[params[0]] = params[2]
 	}
 
+	words = make([]string, len(jmdict.Entries))
 	dict = make(map[string]Entry)
-	for _, jmdictEntry := range jmdict.Entries {
+	for i, jmdictEntry := range jmdict.Entries {
 		// お願い致します|おねがいいたします|1:ねが;3:いた
 		var furiganaInfo *string
 		if len(jmdictEntry.Kanji) > 0 {
@@ -67,6 +77,7 @@ func LoadDict() error {
 			furiganaInfo = nil
 		}
 		entry := ParseEntry(&jmdictEntry, furiganaInfo)
+		words[i] = entry.Kanji
 		dict[entry.Kanji] = entry
 	}
 
@@ -77,7 +88,11 @@ func LoadDict() error {
 	}
 	defer file.Close()
 	encoder := gob.NewEncoder(file)
-	err = encoder.Encode(&dict)
+	data := binaryData{
+		Words: words,
+		Dict:  dict,
+	}
+	err = encoder.Encode(&data)
 	if err != nil {
 		return err
 	}
@@ -204,7 +219,7 @@ func Search(query string) queryResult {
 	otherResults := make([]Entry, 0)
 	truncated := false
 	count := 0
-	for kanji := range dict {
+	for _, kanji := range words {
 		exactMatch := false
 		entry := dict[kanji]
 		if kanji == query {
@@ -214,6 +229,11 @@ func Search(query string) queryResult {
 		if strings.Contains(kanji, query) {
 			goto match
 		}
+		for _, definition := range entry.Definitions {
+			if strings.Contains(strings.ToLower(definition.Definition), strings.ToLower(strings.TrimSpace(query))) {
+				goto match
+			}
+		}
 		// TODO: Skip if query contains kanji
 		if strings.Contains(entry.Reading, query) {
 			goto match