diff --git a/src/libknot/nameserver/name-server.c b/src/libknot/nameserver/name-server.c
index 4a95240181d212ddd196250f90a6dbba55d37865..a1c25472df5d0ac46d6d206fb0a80d55a6034548 100644
--- a/src/libknot/nameserver/name-server.c
+++ b/src/libknot/nameserver/name-server.c
@@ -2141,14 +2141,16 @@ 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
-		if (find_ret == KNOT_EINVAL) {
-		return NS_ERR_SERVFAIL;
+	// 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);
 	}
 
 dbg_ns_exec_verb(