diff --git a/src/libknot/nameserver/name-server.c b/src/libknot/nameserver/name-server.c
index b087bffd2d9b14084e417093f7d9e61e3dd1139b..584493d76cdd34dc7a39b3211fc2e5095ac4c4ff 100644
--- a/src/libknot/nameserver/name-server.c
+++ b/src/libknot/nameserver/name-server.c
@@ -2141,14 +2141,19 @@ static int ns_answer_from_zone(const knot_zone_contents_t *zone,
 	uint16_t qtype = knot_packet_qtype(resp);
 
 search:
-	find_ret = knot_zone_contents_find_dname(zone, qname, &node,
-	                                          &closest_encloser, &previous);
-//	node = knot_node_current(node);
-//	closest_encloser = knot_node_current(closest_encloser);
-//	previous = knot_node_current(previous);
-	previous = NULL; // TODO REVIEW LS
+	// Searching for a name directly is faster than when we need previous dname
+	node = knot_zone_contents_find_node(zone, qname);
+	if (node != NULL) {
+		// If node is found, closest_encloser is equal to node itself
+		closest_encloser = node;
+		find_ret = KNOT_ZONE_NAME_FOUND;
+	} else {
+		// We need previous and closest encloser, full search has to be done
+		find_ret = knot_zone_contents_find_dname(zone, qname, &node,
+		                                         &closest_encloser, &previous);
 		if (find_ret == KNOT_EINVAL) {
-		return NS_ERR_SERVFAIL;
+			return NS_ERR_SERVFAIL;
+		}
 	}
 
 dbg_ns_exec_verb(