diff --git a/entries/views.py b/entries/views.py
index cef9e1780b3ce8dbbbb078c92db8292eab09e552..af32964bc0eabc19cfd5bd0424f991528e9dfd1e 100644
--- a/entries/views.py
+++ b/entries/views.py
@@ -1096,18 +1096,28 @@ def ajax_synsets(request, base, pos):
     return context
 
 
+def lexical_units_without_empty_frames(obj_results):
+    for lu in obj_results.all():
+        lu._frames = lu._frames[0] if lu._frames and len(lu._frames) > 0 else None
+        if lu._frames is None:
+            continue
+        else:
+            yield lu
+
+
 @ajax(method='get', encode_result=True)
 def ajax_free_slowal_frame_lookup(request, term):
-    results = []
     if len(term) > 0:
-        obj_results = LexicalUnit.objects.filter(base__startswith=term).filter(frames__assignments=None)
-        results = get_ordered_lexical_units_synsets(obj_results)
-    return {'result': results}
-
+        obj_results = LexicalUnit.objects.filter(base__startswith=term)\
+            .filter(frames__assignments=None).order_by('base', 'sense')
+        obj_results = obj_results.prefetch_related(
+                Prefetch(
+                    "frames",
+                    to_attr="_frames",
+                )
+        )
+        lexical_unit_str = []
+        for lexical_unit in lexical_units_without_empty_frames(obj_results):
+            lexical_unit_str.append(str(lexical_unit))
+    return {'result': lexical_unit_str}
 
-def get_ordered_lexical_units_synsets(lexical_units_query):
-    lexical_unit_bases = []
-    ordered_lexical_units = lexical_units_query.order_by('base', 'sense')
-    for lexical_unit in ordered_lexical_units:
-        lexical_unit_bases.append(str(lexical_unit))
-    return lexical_unit_bases