diff --git a/lib/cookies/control.c b/lib/cookies/control.c
index 96f0b0cfab7b95a23fb9735624c5c692c7fbcdc4..87b9dc52dfd315bc21ebff2caf866e8e0db0a14c 100644
--- a/lib/cookies/control.c
+++ b/lib/cookies/control.c
@@ -17,6 +17,7 @@
 #include "lib/cookies/control.h"
 
 struct kr_cookie_ctx kr_glob_cookie_ctx = {
-	.clnt = { false, { NULL, -1 }, { NULL, -1}, DFLT_COOKIE_TTL },
-	.srvr = { false, { NULL, -1 }, { NULL, -1} }
+	.clnt = { false, { NULL, -1 }, { NULL, -1} },
+	.srvr = { false, { NULL, -1 }, { NULL, -1} },
+	.cache_ttl = DFLT_COOKIE_TTL
 };
diff --git a/lib/cookies/control.h b/lib/cookies/control.h
index ca546a078575deca495262d88104023495702121..97e6e5ad98a7ef11dc83b84c8a63cc92304a5abc 100644
--- a/lib/cookies/control.h
+++ b/lib/cookies/control.h
@@ -34,40 +34,26 @@ struct kr_cookie_secret {
 /** Default cookie TTL. */
 #define DFLT_COOKIE_TTL 72000
 
-/** Holds settings that have direct influence on client cookie values. */
-struct kr_clnt_cookie_settings {
-	struct kr_cookie_secret *csec; /*!< Client secret data. */
-	int calg_id; /*!< Client cookie algorithm identifier. */
+/** Holds settings that have direct influence on cookie values computation. */
+struct kr_cookie_comp {
+	struct kr_cookie_secret *secr; /*!< Secret data. */
+	int alg_id; /*!< Cookie algorithm identifier. */
 };
 
-/** Holds settings that control client behaviour. */
-struct kr_clnt_cookie_ctx {
-	bool enabled; /**< Enable/disables client DNS cookies functionality. */
+/** Holds settings that control client/server cookie behaviour. */
+struct kr_cookie_settings {
+	bool enabled; /**< Enable/disables DNS cookies functionality. */
 
-	struct kr_clnt_cookie_settings current; /**< Current cookie client settings. */
-	struct kr_clnt_cookie_settings recent; /**< Current cookie client settings. */
-
-	uint32_t cache_ttl; /**< TTL used when caching cookies */
-};
-
-/** Holds settings that have direct influence on server cookie values. */
-struct kr_srvr_cookie_settings {
-	struct kr_cookie_secret *ssec; /*!< Server secret data. */
-	int salg_id; /**< Server cookie algorithm identifier. */
-};
-
-/** Holds settings that control server behaviour. */
-struct kr_srvr_cookie_ctx {
-	bool enabled; /**< Enable/disables server DNS cookies functionality. */
-
-	struct kr_srvr_cookie_settings current; /**< Current cookie server settings. */
-	struct kr_srvr_cookie_settings recent; /**< Current cookie server settings. */
+	struct kr_cookie_comp current; /**< Current cookie settings. */
+	struct kr_cookie_comp recent; /**< Recent cookie settings. */
 };
 
 /** DNS cookies controlling structure. */
 struct kr_cookie_ctx {
-	struct kr_clnt_cookie_ctx clnt; /**< Client settings. */
-	struct kr_srvr_cookie_ctx srvr; /**< Server settings. */
+	struct kr_cookie_settings clnt; /**< Client settings. */
+	struct kr_cookie_settings srvr; /**< Server settings. */
+
+	uint32_t cache_ttl; /**< TTL used when caching cookies */
 };
 
 /** Global cookie control context. */
diff --git a/lib/cookies/helper.c b/lib/cookies/helper.c
index e9a3a5ee9a103b9872b18dcca3658aae3b94d819..2e13462abff7560f549fdc9efac96861d8de0b36 100644
--- a/lib/cookies/helper.c
+++ b/lib/cookies/helper.c
@@ -111,13 +111,13 @@ static int opt_rr_add_cc(knot_rrset_t *opt_rr, uint8_t *cc, uint16_t cc_len,
 #undef SC_LEN
 }
 
-int kr_request_put_cookie(const struct kr_clnt_cookie_settings *clnt_cntrl,
+int kr_request_put_cookie(const struct kr_cookie_comp *clnt_comp,
                           struct kr_cache *cookie_cache,
                           const struct sockaddr *clnt_sa,
                           const struct sockaddr *srvr_sa,
                           knot_pkt_t *pkt)
 {
-	if (!clnt_cntrl || !pkt) {
+	if (!clnt_comp || !pkt) {
 		return kr_error(EINVAL);
 	}
 
@@ -125,7 +125,7 @@ int kr_request_put_cookie(const struct kr_clnt_cookie_settings *clnt_cntrl,
 		return kr_ok();
 	}
 
-	if (!clnt_cntrl->csec || (clnt_cntrl->calg_id < 0) || !cookie_cache) {
+	if (!clnt_comp->secr || (clnt_comp->alg_id < 0) || !cookie_cache) {
 		return kr_error(EINVAL);
 	}
 
@@ -135,14 +135,14 @@ int kr_request_put_cookie(const struct kr_clnt_cookie_settings *clnt_cntrl,
 	struct knot_cc_input input = {
 		.clnt_sockaddr = clnt_sa,
 		.srvr_sockaddr = srvr_sa,
-		.secret_data = clnt_cntrl->csec->data,
-		.secret_len = clnt_cntrl->csec->size
+		.secret_data = clnt_comp->secr->data,
+		.secret_len = clnt_comp->secr->size
 	};
 	uint8_t cc[KNOT_OPT_COOKIE_CLNT];
 	uint16_t cc_len = KNOT_OPT_COOKIE_CLNT;
-	assert((clnt_cntrl->calg_id >= 0) && kr_cc_algs[clnt_cntrl->calg_id] &&
-	       kr_cc_algs[clnt_cntrl->calg_id]->gen_func);
-	int ret = kr_cc_algs[clnt_cntrl->calg_id]->gen_func(&input, cc, &cc_len);
+	assert((clnt_comp->alg_id >= 0) && kr_cc_algs[clnt_comp->alg_id] &&
+	       kr_cc_algs[clnt_comp->alg_id]->gen_func);
+	int ret = kr_cc_algs[clnt_comp->alg_id]->gen_func(&input, cc, &cc_len);
 	if (ret != kr_ok()) {
 		return ret;
 	}
diff --git a/lib/cookies/helper.h b/lib/cookies/helper.h
index 2638535ebb38a188085f88286aaf262b80835904..ad780972d2323c00d22f0636b2b38c478ea583c1 100644
--- a/lib/cookies/helper.h
+++ b/lib/cookies/helper.h
@@ -25,7 +25,7 @@
 /**
  * @brief Insert a DNS cookie into query packet.
  * @note The packet must already contain ENDS section.
- * @param clnt_cntrl   client cookie control structure
+ * @param clnt_comp    client cookie control structure
  * @param cookie_cache cookie cache
  * @param clnt_sa      client socket address
  * @param srvr_sa      server socket address
@@ -33,7 +33,7 @@
  * @return kr_ok() or error code
  */
 KR_EXPORT
-int kr_request_put_cookie(const struct kr_clnt_cookie_settings *clnt_cntrl,
+int kr_request_put_cookie(const struct kr_cookie_comp *clnt_comp,
                           struct kr_cache *cookie_cache,
                           const struct sockaddr *clnt_sa,
                           const struct sockaddr *srvr_sa,
diff --git a/lib/layer/cookiemonster.c b/lib/layer/cookiemonster.c
index 5b408ceb4311894b0442a00fe71b64d707f452e1..73032f7b087f6ebdc01c1676d0401433d0fc5257 100644
--- a/lib/layer/cookiemonster.c
+++ b/lib/layer/cookiemonster.c
@@ -104,37 +104,37 @@ static const struct sockaddr *guess_server_addr(const struct kr_nsrep *nsrep,
  * @param is_current set to true if the cookie was generate from current secret
  * @param cc client cookie from the response
  * @param cc_len client cookie size
- * @param clnt_cntr client cookie control structure
+ * @param clnt_sett client cookie settings structure
  * @return kr_ok() if matching address found, error code else
  */
 static int srvr_sockaddr_cc_check(const struct sockaddr **sockaddr,
                                   bool *is_current, const struct kr_query *qry,
                                   const uint8_t *cc, uint16_t cc_len,
-                                  const struct kr_clnt_cookie_ctx *clnt_cntrl)
+                                  const struct kr_cookie_settings *clnt_sett)
 {
-	assert(sockaddr && is_current && qry && cc && cc_len && clnt_cntrl);
+	assert(sockaddr && is_current && qry && cc && cc_len && clnt_sett);
 
 	const struct sockaddr *tmp_sockaddr = passed_server_sockaddr(qry);
 
 	/* The address must correspond with the client cookie. */
 	if (tmp_sockaddr) {
-		assert(clnt_cntrl->current.csec);
+		assert(clnt_sett->current.secr);
 
 		struct knot_cc_input input = {
 			.clnt_sockaddr = NULL, /* Not supported yet. */
 			.srvr_sockaddr = tmp_sockaddr,
-			.secret_data = clnt_cntrl->current.csec->data,
-			.secret_len = clnt_cntrl->current.csec->size
+			.secret_data = clnt_sett->current.secr->data,
+			.secret_len = clnt_sett->current.secr->size
 		};
 		int ret = knot_cc_check(cc, cc_len, &input,
-		                        kr_cc_algs[clnt_cntrl->current.calg_id]);
+		                        kr_cc_algs[clnt_sett->current.alg_id]);
 		bool have_current = (ret == KNOT_EOK);
 		if ((ret != KNOT_EOK) &&
-		    clnt_cntrl->recent.csec && (clnt_cntrl->recent.calg_id >= 0)) {
-			input.secret_data = clnt_cntrl->recent.csec->data;
-			input.secret_len = clnt_cntrl->recent.csec->size;
+		    clnt_sett->recent.secr && (clnt_sett->recent.alg_id >= 0)) {
+			input.secret_data = clnt_sett->recent.secr->data;
+			input.secret_len = clnt_sett->recent.secr->size;
 			ret = knot_cc_check(cc, cc_len, &input,
-			                    kr_cc_algs[clnt_cntrl->recent.calg_id]);
+			                    kr_cc_algs[clnt_sett->recent.alg_id]);
 		}
 		if (ret == KNOT_EOK) {
 			*sockaddr = tmp_sockaddr;
@@ -149,15 +149,15 @@ static int srvr_sockaddr_cc_check(const struct sockaddr **sockaddr,
 	/* Abusing name server reputation mechanism to guess IP addresses. */
 	const struct kr_nsrep *ns = &qry->ns;
 	tmp_sockaddr = guess_server_addr(ns, cc, cc_len,
-	                                 clnt_cntrl->current.csec,
-	                                 kr_cc_algs[clnt_cntrl->current.calg_id]);
+	                                 clnt_sett->current.secr,
+	                                 kr_cc_algs[clnt_sett->current.alg_id]);
 	bool have_current = (tmp_sockaddr != NULL);
 	if (!tmp_sockaddr &&
-	    clnt_cntrl->recent.csec && (clnt_cntrl->recent.calg_id >= 0)) {
+	    clnt_sett->recent.secr && (clnt_sett->recent.alg_id >= 0)) {
 		/* Try recent client secret to check obtained cookie. */
 		tmp_sockaddr = guess_server_addr(ns, cc, cc_len,
-		                                 clnt_cntrl->recent.csec,
-		                                 kr_cc_algs[clnt_cntrl->recent.calg_id]);
+		                                 clnt_sett->recent.secr,
+		                                 kr_cc_algs[clnt_sett->recent.alg_id]);
 	}
 	if (tmp_sockaddr) {
 		*sockaddr = tmp_sockaddr;
@@ -248,12 +248,13 @@ static bool is_cookie_cached(struct kr_cache *cache,
 /**
  * Check cookie content and store it to cache.
  */
-static bool check_cookie_content_and_cache(struct kr_clnt_cookie_ctx *clnt_cntrl,
+static bool check_cookie_content_and_cache(const struct kr_cookie_settings *clnt_sett,
+                                           uint32_t cookie_cache_ttl,
                                            struct kr_query *qry,
                                            uint8_t *pkt_cookie_opt,
                                            struct kr_cache *cache)
 {
-	assert(clnt_cntrl && qry && pkt_cookie_opt && cache);
+	assert(clnt_sett && qry && pkt_cookie_opt && cache);
 
 	uint8_t *pkt_cookie_data = knot_edns_opt_get_data(pkt_cookie_opt);
 	uint16_t pkt_cookie_len = knot_edns_opt_get_length(pkt_cookie_opt);
@@ -276,7 +277,7 @@ static bool check_cookie_content_and_cache(struct kr_clnt_cookie_ctx *clnt_cntrl
 	const struct sockaddr *srvr_sockaddr = NULL;
 	bool returned_current = false;
 	ret = srvr_sockaddr_cc_check(&srvr_sockaddr, &returned_current, qry,
-	                             pkt_cc, pkt_cc_len, clnt_cntrl);
+	                             pkt_cc, pkt_cc_len, clnt_sett);
 	if (ret != kr_ok()) {
 		DEBUG_MSG(NULL, "%s\n", "could not match received cookie");
 		return false;
@@ -287,7 +288,7 @@ static bool check_cookie_content_and_cache(struct kr_clnt_cookie_ctx *clnt_cntrl
 	if (returned_current &&
 	    !is_cookie_cached(cache, srvr_sockaddr, qry->timestamp.tv_sec,
 	                      pkt_cookie_opt)) {
-		struct timed_cookie timed_cookie = { clnt_cntrl->cache_ttl, pkt_cookie_opt };
+		struct timed_cookie timed_cookie = { cookie_cache_ttl, pkt_cookie_opt };
 
 		ret = kr_cookie_cache_insert_cookie(cache, srvr_sockaddr,
 		                                    &timed_cookie,
@@ -337,7 +338,8 @@ static int check_response(knot_layer_t *ctx, knot_pkt_t *pkt)
 		return ctx->state;
 	}
 
-	if (!check_cookie_content_and_cache(&kr_glob_cookie_ctx.clnt, qry,
+	if (!check_cookie_content_and_cache(&kr_glob_cookie_ctx.clnt,
+	                                    kr_glob_cookie_ctx.cache_ttl, qry,
 	                                    pkt_cookie_opt, cookie_cache)) {
 		return KNOT_STATE_FAIL;
 	}
@@ -404,9 +406,9 @@ static int check_request(knot_layer_t *ctx, void *module_param)
 
 	bool ignore_badcookie = true; /* TODO -- Occasionally ignore? */
 
-	struct kr_srvr_cookie_ctx *srvr_cntrl = &kr_glob_cookie_ctx.srvr;
+	struct kr_cookie_settings *srvr_sett = &kr_glob_cookie_ctx.srvr;
 	if (!req->qsource.addr ||
-	    !srvr_cntrl->current.ssec || (srvr_cntrl->current.salg_id < 0)) {
+	    !srvr_sett->current.secr || (srvr_sett->current.alg_id < 0)) {
 		DEBUG_MSG(NULL, "%s\n", "missing server cookie context");
 		return KNOT_STATE_FAIL;
 	}
@@ -415,8 +417,8 @@ static int check_request(knot_layer_t *ctx, void *module_param)
 
 	struct knot_sc_private srvr_data = {
 		.clnt_sockaddr = req->qsource.addr,
-		.secret_data = srvr_cntrl->current.ssec->data,
-		.secret_len = srvr_cntrl->current.ssec->size
+		.secret_data = srvr_sett->current.secr->data,
+		.secret_len = srvr_sett->current.secr->size
 	};
 
 	struct kr_nonce_input nonce = {
@@ -445,17 +447,17 @@ static int check_request(knot_layer_t *ctx, void *module_param)
 	/* Check server cookie obtained in request. */
 
 	ret = knot_sc_check(NONCE_LEN, &cookies, &srvr_data,
-	                    kr_sc_algs[srvr_cntrl->current.salg_id]);
+	                    kr_sc_algs[srvr_sett->current.alg_id]);
 	if (ret == KNOT_EINVAL &&
-	    srvr_cntrl->recent.ssec && (srvr_cntrl->recent.salg_id >= 0)) {
+	    srvr_sett->recent.secr && (srvr_sett->recent.alg_id >= 0)) {
 		/* Try recent algorithm. */
 		struct knot_sc_private recent_srvr_data = {
 			.clnt_sockaddr = req->qsource.addr,
-			.secret_data = srvr_cntrl->recent.ssec->data,
-			.secret_len = srvr_cntrl->recent.ssec->size
+			.secret_data = srvr_sett->recent.secr->data,
+			.secret_len = srvr_sett->recent.secr->size
 		};
 		ret = knot_sc_check(NONCE_LEN, &cookies, &recent_srvr_data,
-		                    kr_sc_algs[srvr_cntrl->recent.salg_id]);
+		                    kr_sc_algs[srvr_sett->recent.alg_id]);
 	}
 	if (ret != KNOT_EOK) {
 		/* TODO -- Silently discard? */
@@ -481,7 +483,7 @@ answer_add_cookies:
 	/* Add server cookie into response. */
 	ret = kr_answer_write_cookie(&srvr_data, cookies.cc, cookies.cc_len,
 	                             &nonce,
-	                             kr_sc_algs[srvr_cntrl->current.salg_id],
+	                             kr_sc_algs[srvr_sett->current.alg_id],
 	                             req->answer);
 	if (ret != kr_ok()) {
 		return_state = KNOT_STATE_FAIL;
diff --git a/lib/resolve.c b/lib/resolve.c
index 12eefdd4b145fd29c50a9f01f285a57140190367..5d11b54cc428ac38911278dcce51619d34031d07 100644
--- a/lib/resolve.c
+++ b/lib/resolve.c
@@ -395,16 +395,16 @@ int kr_resolve_begin(struct kr_request *request, struct kr_context *ctx, knot_pk
 /**
  * @brief Put cookie into answer packet.
  * @param clnt_sockaddr client socket address
- * @param srvr_cntrl control structure of the server cookie algorithm
+ * @param srvr_sett settings structure of the server cookie algorithm
  * @param cookies obtained cookies
  * @param answer answer packet
  * @return state
  */
 static int cookie_answer(const void *clnt_sockaddr,
-                         const struct kr_srvr_cookie_ctx *srvr_cntrl,
+                         const struct kr_cookie_settings *srvr_sett,
                          struct knot_dns_cookies *cookies, knot_pkt_t *answer)
 {
-	assert(srvr_cntrl && cookies && answer);
+	assert(srvr_sett && cookies && answer);
 
 	/* Initialise answer. */
 	knot_wire_set_qr(answer->wire);
@@ -414,8 +414,8 @@ static int cookie_answer(const void *clnt_sockaddr,
 
 	struct knot_sc_private srvr_data = {
 		.clnt_sockaddr = clnt_sockaddr,
-		.secret_data = srvr_cntrl->current.ssec->data,
-		.secret_len = srvr_cntrl->current.ssec->size
+		.secret_data = srvr_sett->current.secr->data,
+		.secret_len = srvr_sett->current.secr->size
 	};
 
 	struct timeval tv;
@@ -429,14 +429,14 @@ static int cookie_answer(const void *clnt_sockaddr,
 	/* Add fres cookie into the answer. */
 	int ret = kr_answer_write_cookie(&srvr_data,
 	                                 cookies->cc, cookies->cc_len, &nonce,
-	                                 kr_sc_algs[srvr_cntrl->current.salg_id], answer);
+	                                 kr_sc_algs[srvr_sett->current.alg_id], answer);
 	if (ret != kr_ok()) {
 		return KNOT_STATE_FAIL;
 	}
 
 	/* Check server cookie only with current settings. */
 	ret = knot_sc_check(NONCE_LEN, cookies, &srvr_data,
-	                    kr_sc_algs[srvr_cntrl->current.salg_id]);
+	                    kr_sc_algs[srvr_sett->current.alg_id]);
 	if (ret != KNOT_EOK) {
 		kr_pkt_set_ext_rcode(answer, KNOT_RCODE_BADCOOKIE);
 		return KNOT_STATE_FAIL | KNOT_STATE_DONE;
diff --git a/modules/cookiectl/cookiectl.c b/modules/cookiectl/cookiectl.c
index 498ab07b7485fae5340a9efd2701eb215efec0f4..cebb5058d002e524df48063b3ae906a50d47c23c 100644
--- a/modules/cookiectl/cookiectl.c
+++ b/modules/cookiectl/cookiectl.c
@@ -31,13 +31,14 @@
 #define NAME_CLIENT_SECRET "client_secret"
 #define NAME_CLIENT_COOKIE_ALG "client_cookie_alg"
 #define NAME_AVAILABLE_CLIENT_COOKIE_ALGS "available_client_cookie_algs"
-#define NAME_CACHE_TTL "cache_ttl"
 
 #define NAME_SERVER_ENABLED "server_enabled"
 #define NAME_SERVER_SECRET "server_secret"
 #define NAME_SERVER_COOKIE_ALG "server_cookie_alg"
 #define NAME_AVAILABLE_SERVER_COOKIE_ALGS "available_server_cookie_algs"
 
+#define NAME_CACHE_TTL "cache_ttl"
+
 static bool aply_enabled(bool *enabled, const JsonNode *node)
 {
 	assert(enabled && node);
@@ -141,32 +142,16 @@ static bool apply_secret(struct kr_cookie_secret **sec, const JsonNode *node)
 	return true;
 }
 
-static bool apply_client_hash_func(struct kr_cookie_ctx *cntrl,
-                                   const JsonNode *node)
+static bool apply_hash_func(struct kr_cookie_settings *sett,
+                            const JsonNode *node, const knot_lookup_t table[])
 {
 	if (node->tag == JSON_STRING) {
-		const knot_lookup_t *lookup = knot_lookup_by_name(kr_cc_alg_names,
+		const knot_lookup_t *lookup = knot_lookup_by_name(table,
 		                                                  node->string_);
 		if (!lookup) {
 			return false;
 		}
-		cntrl->clnt.current.calg_id = lookup->id;
-		return true;
-	}
-
-	return false;
-}
-
-static bool apply_server_hash_func(struct kr_cookie_ctx *cntrl,
-                                   const JsonNode *node)
-{
-	if (node->tag == JSON_STRING) {
-		const knot_lookup_t *lookup = knot_lookup_by_name(kr_sc_alg_names,
-		                                                  node->string_);
-		if (!lookup) {
-			return false;
-		}
-		cntrl->srvr.current.salg_id = lookup->id;
+		sett->current.alg_id = lookup->id;
 		return true;
 	}
 
@@ -176,14 +161,15 @@ static bool apply_server_hash_func(struct kr_cookie_ctx *cntrl,
 static bool apply_cache_ttl(struct kr_cookie_ctx *cntrl, const JsonNode *node)
 {
 	if (node->tag == JSON_NUMBER) {
-		cntrl->clnt.cache_ttl = node->number_;
+		cntrl->cache_ttl = node->number_;
 		return true;
 	}
 
 	return false;
 }
 
-static bool apply_configuration(struct kr_cookie_ctx *cntrl, const JsonNode *node)
+static bool apply_configuration(struct kr_cookie_ctx *cntrl,
+                                const JsonNode *node)
 {
 	assert(cntrl && node);
 
@@ -195,17 +181,17 @@ static bool apply_configuration(struct kr_cookie_ctx *cntrl, const JsonNode *nod
 	if (strcmp(node->key, NAME_CLIENT_ENABLED) == 0) {
 		return aply_enabled(&cntrl->clnt.enabled, node);
 	} else if (strcmp(node->key, NAME_CLIENT_SECRET) == 0) {
-		return apply_secret(&cntrl->clnt.current.csec, node);
+		return apply_secret(&cntrl->clnt.current.secr, node);
 	} else  if (strcmp(node->key, NAME_CLIENT_COOKIE_ALG) == 0) {
-		return apply_client_hash_func(cntrl, node);
+		return apply_hash_func(&cntrl->clnt, node, kr_cc_alg_names);
 	} else if (strcmp(node->key, NAME_CACHE_TTL) == 0) {
 		return apply_cache_ttl(cntrl, node);
 	} else if (strcmp(node->key, NAME_SERVER_ENABLED) == 0) {
 		return aply_enabled(&cntrl->srvr.enabled, node);
 	} else if (strcmp(node->key, NAME_SERVER_SECRET) == 0) {
-		return apply_secret(&cntrl->srvr.current.ssec, node);
+		return apply_secret(&cntrl->srvr.current.secr, node);
 	} else if (strcmp(node->key, NAME_SERVER_COOKIE_ALG) == 0) {
-		return apply_server_hash_func(cntrl, node);
+		return apply_hash_func(&cntrl->srvr, node, kr_sc_alg_names);
 	}
 
 	return false;
@@ -240,16 +226,17 @@ fail:
 	return false;
 }
 
-static bool read_available_cc_hashes(JsonNode *root)
+static bool read_available_hashes(JsonNode *root, const char *root_name,
+                                  const knot_lookup_t table[])
 {
-	assert(root);
+	assert(root && root_name && table);
 
 	JsonNode *array = json_mkarray();
 	if (!array) {
 		return false;
 	}
 
-	const knot_lookup_t *aux_ptr = kr_cc_alg_names;
+	const knot_lookup_t *aux_ptr = table;
 	while (aux_ptr && (aux_ptr->id >= 0) && aux_ptr->name) {
 		JsonNode *element = json_mkstring(aux_ptr->name);
 		if (!element) {
@@ -259,7 +246,7 @@ static bool read_available_cc_hashes(JsonNode *root)
 		++aux_ptr;
 	}
 
-	json_append_member(root, NAME_AVAILABLE_CLIENT_COOKIE_ALGS, array);
+	json_append_member(root, root_name, array);
 
 	return true;
 
@@ -270,58 +257,16 @@ fail:
 	return false;
 }
 
-static bool read_available_sc_hashes(JsonNode *root)
+static bool settings_equal(const struct kr_cookie_comp *s1,
+                           const struct kr_cookie_comp *s2)
 {
-	assert(root);
+	assert(s1 && s2 && s1->secr && s2->secr);
 
-	JsonNode *array = json_mkarray();
-	if (!array) {
+	if (s1->alg_id != s2->alg_id || s1->secr->size != s2->secr->size) {
 		return false;
 	}
 
-	const knot_lookup_t *aux_ptr = kr_sc_alg_names;
-	while (aux_ptr && (aux_ptr->id >= 0) && aux_ptr->name) {
-		JsonNode *element = json_mkstring(aux_ptr->name);
-		if (!element) {
-			goto fail;
-		}
-		json_append_element(array, element);
-		++aux_ptr;
-	}
-
-	json_append_member(root, NAME_AVAILABLE_SERVER_COOKIE_ALGS, array);
-
-	return true;
-
-fail:
-	if (array) {
-		json_delete(array);
-	}
-	return false;
-}
-
-static bool clnt_settings_equal(const struct kr_clnt_cookie_settings *s1,
-                                const struct kr_clnt_cookie_settings *s2)
-{
-	assert(s1 && s2 && s1->csec && s2->csec);
-
-	if (s1->calg_id != s2->calg_id || s1->csec->size != s2->csec->size) {
-		return false;
-	}
-
-	return 0 == memcmp(s1->csec->data, s2->csec->data, s1->csec->size);
-}
-
-static bool srvr_settings_equal(const struct kr_srvr_cookie_settings *s1,
-                                const struct kr_srvr_cookie_settings *s2)
-{
-	assert(s1 && s2 && s1->ssec && s2->ssec);
-
-	if (s1->salg_id != s2->salg_id || s1->ssec->size != s2->ssec->size) {
-		return false;
-	}
-
-	return 0 == memcmp(s1->ssec->data, s2->ssec->data, s1->ssec->size);
+	return 0 == memcmp(s1->secr->data, s2->secr->data, s1->secr->size);
 }
 
 static void apply_from_copy(struct kr_cookie_ctx *running,
@@ -329,24 +274,22 @@ static void apply_from_copy(struct kr_cookie_ctx *running,
 {
 	assert(running && shallow);
 
-	if (!clnt_settings_equal(&running->clnt.current,
-	                         &shallow->clnt.current)) {
-		free(running->clnt.recent.csec); /* Delete old secret. */
+	if (!settings_equal(&running->clnt.current, &shallow->clnt.current)) {
+		free(running->clnt.recent.secr); /* Delete old secret. */
 		running->clnt.recent = running->clnt.current;
 		running->clnt.current = shallow->clnt.current;
 		/* Shallow will be deleted after this function call. */
 	}
 
-	if (!srvr_settings_equal(&running->srvr.current,
-	                         &shallow->srvr.current)) {
-		free(running->srvr.recent.ssec); /* Delete old secret. */
+	if (!settings_equal(&running->srvr.current, &shallow->srvr.current)) {
+		free(running->srvr.recent.secr); /* Delete old secret. */
 		running->srvr.recent = running->srvr.current;
 		running->srvr.current = shallow->srvr.current;
 		/* Shallow will be deleted after this function call. */
 	}
 
 	/* Direct application. */
-	running->clnt.cache_ttl = shallow->clnt.cache_ttl;
+	running->cache_ttl = shallow->cache_ttl;
 	running->clnt.enabled = shallow->clnt.enabled;
 	running->srvr.enabled = shallow->srvr.enabled;
 }
@@ -382,11 +325,11 @@ static bool apply_config(struct kr_cookie_ctx *ctx, const char *args)
 		apply_from_copy(ctx, &shallow_copy);
 	} else {
 		/* Clean newly allocated data. */
-		if (shallow_copy.clnt.current.csec != ctx->clnt.current.csec) {
-			free(shallow_copy.clnt.current.csec);
+		if (shallow_copy.clnt.current.secr != ctx->clnt.current.secr) {
+			free(shallow_copy.clnt.current.secr);
 		}
-		if (shallow_copy.srvr.current.ssec != ctx->srvr.current.ssec) {
-			free(shallow_copy.srvr.current.ssec);
+		if (shallow_copy.srvr.current.secr != ctx->srvr.current.secr) {
+			free(shallow_copy.srvr.current.secr);
 		}
 	}
 
@@ -406,31 +349,33 @@ char *read_config(struct kr_cookie_ctx *ctx)
 	json_append_member(root_node, NAME_CLIENT_ENABLED,
 	                   json_mkbool(ctx->clnt.enabled));
 
-	read_secret(root_node, NAME_CLIENT_SECRET, ctx->clnt.current.csec);
+	read_secret(root_node, NAME_CLIENT_SECRET, ctx->clnt.current.secr);
 
-	lookup = knot_lookup_by_id(kr_cc_alg_names, ctx->clnt.current.calg_id);
+	lookup = knot_lookup_by_id(kr_cc_alg_names, ctx->clnt.current.alg_id);
 	if (lookup) {
 		json_append_member(root_node, NAME_CLIENT_COOKIE_ALG,
 		                   json_mkstring(lookup->name));
 	}
 
-	read_available_cc_hashes(root_node);
+	read_available_hashes(root_node, NAME_AVAILABLE_CLIENT_COOKIE_ALGS,
+	                      kr_cc_alg_names);
 
 	json_append_member(root_node, NAME_CACHE_TTL,
-	                   json_mknumber(ctx->clnt.cache_ttl));
+	                   json_mknumber(ctx->cache_ttl));
 
 	json_append_member(root_node, NAME_SERVER_ENABLED,
 	                   json_mkbool(ctx->srvr.enabled));
 
-	read_secret(root_node, NAME_SERVER_SECRET, ctx->srvr.current.ssec);
+	read_secret(root_node, NAME_SERVER_SECRET, ctx->srvr.current.secr);
 
-	lookup = knot_lookup_by_id(kr_sc_alg_names, ctx->srvr.current.salg_id);
+	lookup = knot_lookup_by_id(kr_sc_alg_names, ctx->srvr.current.alg_id);
 	if (lookup) {
 		json_append_member(root_node, NAME_SERVER_COOKIE_ALG,
 		                   json_mkstring(lookup->name));
 	}
 
-	read_available_sc_hashes(root_node);
+	read_available_hashes(root_node, NAME_AVAILABLE_SERVER_COOKIE_ALGS,
+	                      kr_sc_alg_names);
 
 	result = json_encode(root_node);
 	json_delete(root_node);
@@ -476,17 +421,20 @@ int cookiectl_init(struct kr_module *module)
 	const knot_lookup_t *lookup;
 
 	kr_glob_cookie_ctx.clnt.enabled = false;
-	kr_glob_cookie_ctx.clnt.current.csec = cs;
+	kr_glob_cookie_ctx.clnt.current.secr = cs;
 	lookup = knot_lookup_by_name(kr_cc_alg_names, "FNV-64");
 	assert(lookup);
-	kr_glob_cookie_ctx.clnt.current.calg_id = lookup->id;
-	kr_glob_cookie_ctx.clnt.cache_ttl = DFLT_COOKIE_TTL;
+	kr_glob_cookie_ctx.clnt.current.alg_id = lookup->id;
+	kr_glob_cookie_ctx.clnt.recent.alg_id = -1;
 
 	kr_glob_cookie_ctx.srvr.enabled = false;
-	kr_glob_cookie_ctx.srvr.current.ssec = ss;
+	kr_glob_cookie_ctx.srvr.current.secr = ss;
 	lookup = knot_lookup_by_name(kr_sc_alg_names, "FNV-64");
 	assert(lookup);
-	kr_glob_cookie_ctx.srvr.current.salg_id = lookup->id;
+	kr_glob_cookie_ctx.srvr.current.alg_id = lookup->id;
+	kr_glob_cookie_ctx.srvr.recent.alg_id = -1;
+
+	kr_glob_cookie_ctx.cache_ttl = DFLT_COOKIE_TTL;
 
 	module->data = NULL;
 
@@ -498,19 +446,19 @@ int cookiectl_deinit(struct kr_module *module)
 {
 	kr_glob_cookie_ctx.clnt.enabled = false;
 
-	free(kr_glob_cookie_ctx.clnt.recent.csec);
-	kr_glob_cookie_ctx.clnt.recent.csec = NULL;
+	free(kr_glob_cookie_ctx.clnt.recent.secr);
+	kr_glob_cookie_ctx.clnt.recent.secr = NULL;
 
-	free(kr_glob_cookie_ctx.clnt.current.csec);
-	kr_glob_cookie_ctx.clnt.current.csec = NULL;
+	free(kr_glob_cookie_ctx.clnt.current.secr);
+	kr_glob_cookie_ctx.clnt.current.secr = NULL;
 
 	kr_glob_cookie_ctx.srvr.enabled = false;
 
-	free(kr_glob_cookie_ctx.srvr.recent.ssec);
-	kr_glob_cookie_ctx.srvr.recent.ssec = NULL;
+	free(kr_glob_cookie_ctx.srvr.recent.secr);
+	kr_glob_cookie_ctx.srvr.recent.secr = NULL;
 
-	free(kr_glob_cookie_ctx.srvr.current.ssec);
-	kr_glob_cookie_ctx.srvr.current.ssec = NULL;
+	free(kr_glob_cookie_ctx.srvr.current.secr);
+	kr_glob_cookie_ctx.srvr.current.secr = NULL;
 
 	return kr_ok();
 }