diff --git a/daemon/worker.c b/daemon/worker.c
index e610501906668fd9286738ca8ed3722391f7dd5f..2cbdb359099b94101854b651dd9ae12c22855af7 100644
--- a/daemon/worker.c
+++ b/daemon/worker.c
@@ -23,6 +23,9 @@
 #include "daemon/worker.h"
 #include "daemon/layer/query.h"
 
+/* Defines */
+#define CACHE_DEFAULT_SIZE 10*1024*1024
+
 static void buf_alloc(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf)
 {
 	struct worker_ctx *worker = handle->data;
@@ -86,12 +89,26 @@ static void worker_recv(uv_udp_t *handle, ssize_t nread, const uv_buf_t *buf,
 	knot_pkt_free(&answer);
 }
 
-void worker_init(struct worker_ctx *worker, mm_ctx_t *mm)
+int worker_init(struct worker_ctx *worker, mm_ctx_t *mm)
 {
 	memset(worker, 0, sizeof(struct worker_ctx));
 	worker->pool = mm;
 
-	kr_context_init(&worker->resolve, mm);
+	/* Open resolution context */
+	int ret = kr_context_init(&worker->resolve, mm);
+	if (ret != KNOT_EOK) {
+		return ret;
+	}
+
+	/* Open resolution context cache */
+	worker->resolve.cache = kr_cache_open("/tmp/kresolved", mm, CACHE_DEFAULT_SIZE);
+	if (worker->resolve.cache == NULL) {
+		fprintf(stderr, "Cache directory '/tmp/kresolved' not exists, exitting.\n");
+		kr_context_deinit(&worker->resolve);
+		return KNOT_ERROR;
+	}
+
+	return KNOT_EOK;
 }
 
 void worker_deinit(struct worker_ctx *worker)
diff --git a/daemon/worker.h b/daemon/worker.h
index 6047ba58b7cc2ff8bdf6459ea28ae51531ef14d7..32b57fe40a9264b26be59ddc07ced73b9724f849 100644
--- a/daemon/worker.h
+++ b/daemon/worker.h
@@ -26,7 +26,7 @@ struct worker_ctx {
 	mm_ctx_t *pool;
 };
 
-void worker_init(struct worker_ctx *worker, mm_ctx_t *mm);
+int worker_init(struct worker_ctx *worker, mm_ctx_t *mm);
 void worker_deinit(struct worker_ctx *worker);
 void worker_start(uv_udp_t *req, struct worker_ctx *worker);
 void worker_stop(uv_udp_t *req);
diff --git a/lib/context.c b/lib/context.c
index dd3139cb58960659e9a3e3aadb47d3fce9201849..9de4c3d65e42bd91faa3fe778f12f44f02b90965 100644
--- a/lib/context.c
+++ b/lib/context.c
@@ -23,22 +23,25 @@
 
 int kr_context_init(struct kr_context *ctx, mm_ctx_t *mm)
 {
-	memset(ctx, 0, sizeof(struct kr_context));
+	if (ctx == NULL) {
+		return KNOT_EINVAL;
+	}
 
+	memset(ctx, 0, sizeof(struct kr_context));
 	ctx->pool = mm;
 
-	ctx->cache = kr_cache_open("/tmp/kresolved", mm);
-	if (ctx->cache == NULL) {
-		fprintf(stderr, "Cache directory '/tmp/kresolved' not exists, exitting.\n");
-		return KNOT_ERROR;
-	}
-
 	return KNOT_EOK;
 }
 
 int kr_context_deinit(struct kr_context *ctx)
 {
-	kr_cache_close(ctx->cache);
+	if (ctx == NULL) {
+		return KNOT_EINVAL;
+	}
+
+	if (ctx->cache) {
+		kr_cache_close(ctx->cache);
+	}
 
 	return KNOT_EOK;
 }