diff --git a/include/proto/dns.h b/include/proto/dns.h
index aa063c7..c3e3846 100644
--- a/include/proto/dns.h
+++ b/include/proto/dns.h
@@ -23,46 +23,26 @@
 #define _PROTO_DNS_H
 
 #include <types/dns.h>
-#include <types/proto_udp.h>
 
-char *dns_str_to_dn_label(const char *string, char *dn, int dn_len);
-int dns_str_to_dn_label_len(const char *string);
-void dns_dn_label_to_str(char *dn, char *str, int dn_len);
+extern struct list dns_resolvers;
+
+struct dns_resolvers *find_resolvers_by_id(const char *id);
+struct dns_srvrq *find_srvrq_by_name(const char *name, struct proxy *px);
+struct dns_srvrq *new_dns_srvrq(struct server *srv, char *fqdn);
+
+int dns_str_to_dn_label(const char *str, int str_len, char *dn, int dn_len);
+int dns_dn_label_to_str(const char *dn, int dn_len, char *str, int str_len);
+
 int dns_hostname_validation(const char *string, char **err);
-int dns_build_query(int query_id, int query_type, unsigned int accepted_payload_size, char *hostname_dn, int hostname_dn_len, char *buf, int bufsize);
-struct task *dns_process_resolve(struct task *t);
-int dns_init_resolvers(int close_socket);
-uint16_t dns_rnd16(void);
-int dns_validate_dns_response(unsigned char *resp, unsigned char *bufend, struct dns_resolution *resolution, int max_answer_records);
 int dns_get_ip_from_response(struct dns_response_packet *dns_p,
                              struct dns_options *dns_opts, void *currentip,
                              short currentip_sin_family,
                              void **newip, short *newip_sin_family,
                              void *owner);
-void dns_resolve_send(struct dgram_conn *dgram);
-void dns_resolve_recv(struct dgram_conn *dgram);
-int dns_send_query(struct dns_resolution *resolution);
-void dns_print_current_resolutions(struct dns_resolvers *resolvers);
-void dns_update_resolvers_timeout(struct dns_resolvers *resolvers);
-void dns_reset_resolution(struct dns_resolution *resolution);
-void dns_resolution_free(struct dns_resolvers *resolvers, struct dns_resolution *resolution);
-void dns_rm_requester_from_resolution(struct dns_requester *requester, struct dns_resolution *resolution);
-int dns_check_resolution_queue(struct dns_resolvers *resolvers);
-unsigned short dns_response_get_query_id(unsigned char *resp);
-struct dns_resolution *dns_alloc_resolution(void);
-void dns_free_resolution(struct dns_resolution *resolution);
-struct chunk *dns_cache_key(int query_type, char *hostname_dn, int hostname_dn_len, struct chunk *buf);
-struct lru64 *dns_cache_lookup(int query_type, char *hostname_dn, int hostname_dn_len, int valid_period, void *cache_domain);
-int dns_link_resolution(void *requester, int requester_type, struct dns_resolution *resolution);
-struct dns_resolution *dns_resolution_list_get(struct dns_resolvers *resolvers, char *hostname_dn, int query_type);
-int dns_trigger_resolution(struct dns_resolution *resolution);
-int dns_alloc_resolution_pool(struct dns_resolvers *resolvers);
 
-void dump_dns_config(void);
+int dns_link_resolution(void *requester, int requester_type);
+void dns_unlink_resolution(struct dns_requester *requester);
+void dns_trigger_resolution(struct dns_requester *requester);
 
-/*
- * erases all information of a dns_requester structure
- */
-#define		dns_clear_requester(requester)	memset(requester, '\0', sizeof(*requester));
 
 #endif // _PROTO_DNS_H
diff --git a/include/proto/server.h b/include/proto/server.h
index b521995..b101b3e 100644
--- a/include/proto/server.h
+++ b/include/proto/server.h
@@ -60,7 +60,6 @@
 int snr_resolution_cb(struct dns_requester *requester, struct dns_nameserver *nameserver);
 int snr_resolution_error_cb(struct dns_requester *requester, int error_code);
 struct server *snr_check_ip_callback(struct server *srv, void *ip, unsigned char *ip_family);
-void srv_free_from_resolution(struct server *srv);
 
 /* increase the number of cumulated connections on the designated server */
 static void inline srv_inc_sess_ctr(struct server *s)
diff --git a/include/types/dns.h b/include/types/dns.h
index 06e014c..1c68551 100644
--- a/include/types/dns.h
+++ b/include/types/dns.h
@@ -22,21 +22,32 @@
 #ifndef _TYPES_DNS_H
 #define _TYPES_DNS_H
 
+#include <eb32tree.h>
+
+#include <common/mini-clist.h>
+
+#include <types/connection.h>
+#include <types/obj_type.h>
+#include <types/proto_udp.h>
+#include <types/proxy.h>
+#include <types/server.h>
+#include <types/task.h>
+
 /*DNS maximum values */
 /*
  * Maximum issued from RFC:
  *  RFC 1035: https://www.ietf.org/rfc/rfc1035.txt chapter 2.3.4
  *  RFC 2671: http://tools.ietf.org/html/rfc2671
  */
-#define DNS_MAX_LABEL_SIZE	63
-#define DNS_MAX_NAME_SIZE	255
-#define DNS_MAX_UDP_MESSAGE	8192
+#define DNS_MAX_LABEL_SIZE   63
+#define DNS_MAX_NAME_SIZE    255
+#define DNS_MAX_UDP_MESSAGE  8192
 
 /* DNS minimun record size: 1 char + 1 NULL + type + class */
-#define DNS_MIN_RECORD_SIZE	( 1 + 1 + 2 + 2 )
+#define DNS_MIN_RECORD_SIZE  (1 + 1 + 2 + 2)
 
 /* DNS smallest fqdn 'a.gl' size */
-# define DNS_SMALLEST_FQDN_SIZE	4
+# define DNS_SMALLEST_FQDN_SIZE 4
 
 /* maximum number of query records in a DNS response
  * For now, we allow only one */
@@ -52,29 +63,29 @@
 #define DNS_ANALYZE_BUFFER_SIZE DNS_MAX_UDP_MESSAGE + DNS_MAX_NAME_SIZE
 
 /* DNS error messages */
-#define DNS_TOO_LONG_FQDN	"hostname too long"
-#define DNS_LABEL_TOO_LONG	"one label too long"
-#define DNS_INVALID_CHARACTER	"found an invalid character"
+#define DNS_TOO_LONG_FQDN       "hostname too long"
+#define DNS_LABEL_TOO_LONG      "one label too long"
+#define DNS_INVALID_CHARACTER   "found an invalid character"
 
 /* dns query class */
-#define DNS_RCLASS_IN		1	/* internet class */
+#define DNS_RCLASS_IN           1      /* internet class */
 
 /* dns record types (non exhaustive list) */
-#define DNS_RTYPE_A		1	/* IPv4 address */
-#define DNS_RTYPE_CNAME		5	/* canonical name */
-#define DNS_RTYPE_AAAA		28	/* IPv6 address */
-#define DNS_RTYPE_SRV		33	/* SRV record */
-#define DNS_RTYPE_OPT		41	/* OPT */
-#define DNS_RTYPE_ANY		255	/* all records */
+#define DNS_RTYPE_A             1       /* IPv4 address */
+#define DNS_RTYPE_CNAME         5       /* canonical name */
+#define DNS_RTYPE_AAAA          28      /* IPv6 address */
+#define DNS_RTYPE_SRV           33      /* SRV record */
+#define DNS_RTYPE_OPT           41      /* OPT */
+#define DNS_RTYPE_ANY           255     /* all records */
 
 /* dns rcode values */
-#define DNS_RCODE_NO_ERROR	0	/* no error */
-#define DNS_RCODE_NX_DOMAIN	3	/* non existent domain */
-#define DNS_RCODE_REFUSED	5	/* query refused */
+#define DNS_RCODE_NO_ERROR      0       /* no error */
+#define DNS_RCODE_NX_DOMAIN     3       /* non existent domain */
+#define DNS_RCODE_REFUSED       5       /* query refused */
 
 /* dns flags masks */
-#define DNS_FLAG_TRUNCATED	0x0200	/* mask for truncated flag */
-#define DNS_FLAG_REPLYCODE	0x000F	/* mask for reply code */
+#define DNS_FLAG_TRUNCATED      0x0200  /* mask for truncated flag */
+#define DNS_FLAG_REPLYCODE      0x000F  /* mask for reply code */
 
 /* max number of network preference entries are avalaible from the
  * configuration file.
@@ -82,10 +93,7 @@
 #define SRV_MAX_PREF_NET 5
 
 /* DNS header size */
-#define DNS_HEADER_SIZE		((int)sizeof(struct dns_header))
-
-/* DNS resolution pool size, per resolvers section */
-#define DNS_DEFAULT_RESOLUTION_POOL_SIZE	64
+#define DNS_HEADER_SIZE  ((int)sizeof(struct dns_header))
 
 /* DNS request or response header structure */
 struct dns_header {
@@ -100,254 +108,244 @@
 /* short structure to describe a DNS question */
 /* NOTE: big endian structure */
 struct dns_question {
-	unsigned short	qtype;		/* question type */
-	unsigned short	qclass;		/* query class */
+	unsigned short qtype;   /* question type */
+	unsigned short qclass;  /* query class */
 };
 
 /* NOTE: big endian structure */
 struct dns_query_item {
-	struct list list;
-	char name[DNS_MAX_NAME_SIZE];		/* query name */
-	unsigned short type;			/* question type */
-	unsigned short class;			/* query class */
+	char           name[DNS_MAX_NAME_SIZE]; /* query name */
+	unsigned short type;                    /* question type */
+	unsigned short class;                   /* query class */
+	struct list    list;
 };
 
 /* NOTE: big endian structure */
 struct dns_additional_record {
-	uint8_t name;                           /* domain name, must be 0 (RFC 6891) */
-	uint16_t type;			/* record type DNS_RTYPE_OPT (41) */
-	uint16_t udp_payload_size;	/* maximum size accepted for the response */
-	uint32_t extension;				/* extended rcode and flags, not used for now */
-	uint16_t data_length;		/* data length */
-/* as of today, we don't support yet edns options, that said I already put a placeholder here
- * for this purpose. We may need to define a dns_option_record structure which itself should
- * point to different type of data, based on the extension set (client subnet, tcp keepalive,
- * etc...)*/
-//	struct list options;			/* list of option records */
+	uint8_t  name;             /* domain name, must be 0 (RFC 6891) */
+	uint16_t type;             /* record type DNS_RTYPE_OPT (41) */
+	uint16_t udp_payload_size; /* maximum size accepted for the response */
+	uint32_t extension;        /* extended rcode and flags, not used for now */
+	uint16_t data_length;      /* data length */
+/* as of today, we don't support yet edns options, that said I already put a
+ * placeholder here for this purpose. We may need to define a dns_option_record
+ * structure which itself should point to different type of data, based on the
+ * extension set (client subnet, tcp keepalive, etc...)*/
+//	struct list options;       /* list of option records */
 } __attribute__ ((packed));
 
 /* NOTE: big endian structure */
 struct dns_answer_item {
-	struct list list;
-	char name[DNS_MAX_NAME_SIZE];		/* answer name
-						 * For SRV type, name also includes service
-						 * and protocol value */
-	int16_t type;				/* question type */
-	int16_t class;				/* query class */
-	int32_t ttl;				/* response TTL */
-	int16_t priority;			/* SRV type priority */
-	int16_t weight;				/* SRV type weight */
-	int16_t port;				/* SRV type port */
-	int16_t data_len;			/* number of bytes in target below */
-	struct sockaddr address;		/* IPv4 or IPv6, network format */
-	char target[DNS_MAX_NAME_SIZE];		/* Response data: SRV or CNAME type target */
-	time_t last_seen;			/* When was the answer was last seen */
+	/*For SRV type, name also includes service and protocol value */
+	char            name[DNS_MAX_NAME_SIZE];   /* answer name */
+	int16_t         type;                      /* question type */
+	int16_t         class;                     /* query class */
+	int32_t         ttl;                       /* response TTL */
+	int16_t         priority;                  /* SRV type priority */
+	int16_t         weight;                    /* SRV type weight */
+	int16_t         port;                      /* SRV type port */
+	int16_t         data_len;                  /* number of bytes in target below */
+	struct sockaddr address;                   /* IPv4 or IPv6, network format */
+	char            target[DNS_MAX_NAME_SIZE]; /* Response data: SRV or CNAME type target */
+	time_t          last_seen;                 /* When was the answer was last seen */
+	struct list     list;
 };
 
 struct dns_response_packet {
 	struct dns_header header;
-	struct list query_list;
-	struct list answer_list;
+	struct list       query_list;
+	struct list       answer_list;
 	/* authority and additional_information ignored for now */
 };
 
-/*
- * resolvers section and parameters. It is linked to the name servers
+/* Resolvers section and parameters. It is linked to the name servers
  * servers points to it.
  * current resolution are stored in a FIFO list.
  */
 struct dns_resolvers {
-	struct list list;		/* resolvers list */
-	char *id;			/* resolvers unique identifier */
+	char      *id;                      /* resolvers unique identifier */
 	struct {
-		const char *file;	/* file where the section appears */
-		int line;		/* line where the section appears */
-	} conf;				/* config information */
-	struct list nameserver_list;	/* dns server list */
-	unsigned int accepted_payload_size;	/* maximum payload size we accept for responses */
-	int count_nameservers;			/* total number of nameservers in a resolvers section */
-	int resolve_retries;		/* number of retries before giving up */
-	struct {			/* time to: */
-		int retry;		/*   wait for a response before retrying */
+		const char *file;           /* file where the section appears */
+		int         line;           /* line where the section appears */
+	} conf;                             /* config information */
+	struct list  nameservers;           /* dns server list */
+	unsigned int accepted_payload_size; /* maximum payload size we accept for responses */
+	int          nb_nameservers;        /* total number of active nameservers in a resolvers section */
+	int          resolve_retries;       /* number of retries before giving up */
+	struct {                            /* time to: */
+		int resolve;                /*     wait between 2 queries for the same resolution */
+		int retry;                  /*     wait for a response before retrying */
 	} timeout;
-	struct {			/* time to hold current data when */
-		int valid;		/*   a response is valid */
-		int nx;                 /*   a response doesn't exist */
-		int timeout;            /*   no answer was delivered */
-		int refused;            /*   dns server refused to answer */
-		int other;              /*   other dns response errors */
-		int obsolete;		/*   an answer hasn't been seen */
+	struct {                            /* time to hold current data when */
+		int valid;                  /*     a response is valid */
+		int nx;                     /*     a response doesn't exist */
+		int timeout;                /*     no answer was delivered */
+		int refused;                /*     dns server refused to answer */
+		int other;                  /*     other dns response errors */
+		int obsolete;               /*     an answer hasn't been seen */
 	} hold;
-	struct task *t;			/* timeout management */
-	int resolution_pool_size;	/* size of the resolution pool associated to this resolvers section */
+	struct task *t;                     /* timeout management */
 	struct {
-		struct list pool;	/* resolution pool dedicated to this resolvers section */
-		struct list wait;	/* resolutions managed to this resolvers section */
-		struct list curr;	/* current running resolutions */
-	} resolution;
-	struct eb_root query_ids;	/* tree to quickly lookup/retrieve query ids currently in use */
-					/* used by each nameserver, but stored in resolvers since there must */
-					/* be a unique relation between an eb_root and an eb_node (resolution) */
+		struct list wait;           /* resolutions managed to this resolvers section */
+		struct list curr;           /* current running resolutions */
+	} resolutions;
+	struct eb_root query_ids;           /* tree to quickly lookup/retrieve query ids currently in use
+                                             * used by each nameserver, but stored in resolvers since there must
+                                             * be a unique relation between an eb_root and an eb_node (resolution) */
+	struct list list;                   /* resolvers list */
 };
 
-/*
- * structure describing a name server used during name resolution.
+/* Structure describing a name server used during name resolution.
  * A name server belongs to a resolvers section.
  */
 struct dns_nameserver {
-	struct list list;		/* nameserver chained list */
-	char *id;			/* nameserver unique identifier */
+	char *id;                       /* nameserver unique identifier */
 	struct {
-		const char *file;	/* file where the section appears */
-		int line;		/* line where the section appears */
-	} conf;				/* config information */
-	struct dns_resolvers *resolvers;
-	struct dgram_conn *dgram;		/* transport layer */
-	struct sockaddr_storage addr;	/* IP address */
-	struct {			/* numbers relted to this name server: */
-		long int sent;		/* - queries sent */
-		long int valid;		/* - valid response */
-		long int update;	/* - valid response used to update server's IP */
-		long int cname;		/* - CNAME response requiring new resolution */
-		long int cname_error;	/* - error when resolving CNAMEs */
-		long int any_err;	/* - void response (usually because ANY qtype) */
-		long int nx;		/* - NX response */
-		long int timeout;	/* - queries which reached timeout */
-		long int refused;	/* - queries refused */
-		long int other;		/* - other type of response */
-		long int invalid;	/* - malformed DNS response */
-		long int too_big;	/* - too big response */
-		long int outdated;	/* - outdated response (server slower than the other ones) */
-		long int truncated;	/* - truncated response */
+		const char *file;       /* file where the section appears */
+		int         line;       /* line where the section appears */
+	} conf;                         /* config information */
+
+	struct dns_resolvers   *resolvers;
+	struct dgram_conn      *dgram;  /* transport layer */
+	struct sockaddr_storage addr;   /* IP address */
+
+	struct {                        /* numbers relted to this name server: */
+		long long sent;         /* - queries sent */
+		long long snd_error;    /* - sending errors */
+		long long valid;        /* - valid response */
+		long long update;       /* - valid response used to update server's IP */
+		long long cname;        /* - CNAME response requiring new resolution */
+		long long cname_error;  /* - error when resolving CNAMEs */
+		long long any_err;      /* - void response (usually because ANY qtype) */
+		long long nx;           /* - NX response */
+		long long timeout;      /* - queries which reached timeout */
+		long long refused;      /* - queries refused */
+		long long other;        /* - other type of response */
+		long long invalid;      /* - malformed DNS response */
+		long long too_big;      /* - too big response */
+		long long outdated;     /* - outdated response (server slower than the other ones) */
+		long long truncated;    /* - truncated response */
 	} counters;
+	struct list list;               /* nameserver chained list */
 };
 
 struct dns_options {
-	int family_prio;	/* which IP family should the resolver use when both are returned */
+	int family_prio; /* which IP family should the resolver use when both are returned */
 	struct {
 		int family;
 		union {
-			struct in_addr in4;
+			struct in_addr  in4;
 			struct in6_addr in6;
 		} addr;
 		union {
-			struct in_addr in4;
+			struct in_addr  in4;
 			struct in6_addr in6;
 		} mask;
 	} pref_net[SRV_MAX_PREF_NET];
-	int pref_net_nb;               /* The number of registered prefered networks. */
+	int pref_net_nb; /* The number of registered prefered networks. */
 };
 
-/*
- * resolution structure associated to single server and used to manage name resolution for
- * this server.
- * The only link between the resolution and a nameserver is through the query_id.
+/* Resolution structure associated to single server and used to manage name
+ * resolution for this server.
+ * The only link between the resolution and a nameserver is through the
+ * query_id.
  */
 struct dns_resolution {
-	struct list list;		/* resolution list */
-	struct {
-		struct list wait;	/* list of standby requesters for this resolution */
-		struct list curr;	/* list of requesters currently active on this resolution */
-	} requester;
-	int (*requester_cb)(struct dns_resolution *, struct dns_nameserver *);
-					/* requester callback for valid response */
-	int (*requester_error_cb)(struct dns_resolution *, int);
-					/* requester callback, for error management */
-	int uuid;			/* unique id (used for debugging purpose) */
-	char *hostname_dn;		/* server hostname in domain name label format */
-	int hostname_dn_len;		/* server domain name label len */
-	unsigned int last_resolution;	/* time of the lastest valid resolution */
-	unsigned int last_sent_packet;	/* time of the latest DNS packet sent */
-	unsigned int last_status_change;	/* time of the latest DNS resolution status change */
-	int query_id;			/* DNS query ID dedicated for this resolution */
-	struct eb32_node qid;		/* ebtree query id */
-	int query_type;
-		/* query type to send. By default DNS_RTYPE_A or DNS_RTYPE_AAAA depending on resolver_family_priority */
-	int status;			/* status of the resolution being processed RSLV_STATUS_* */
-	int step;			/* */
-	int try;			/* current resolution try */
-	int try_cname;			/* number of CNAME requests sent */
-	int nb_responses;		/* count number of responses received */
-	unsigned long long revision;    /* updated for each update */
-	struct dns_response_packet response;	/* structure hosting the DNS response */
-	struct dns_query_item response_query_records[DNS_MAX_QUERY_RECORDS];		/* <response> query records */
+	struct dns_resolvers *resolvers;           /* pointer to the resolvers structure owning the resolution */
+	struct list           requesters;          /* list of requesters using this resolution */
+	int                   uuid;                /* unique id (used for debugging purpose) */
+	char                 *hostname_dn;         /* server hostname in domain name label format */
+	int                   hostname_dn_len;     /* server domain name label len */
+	unsigned int          last_resolution;     /* time of the last resolution */
+	unsigned int          last_query;          /* time of the last query sent */
+	unsigned int          last_valid;          /* time of the last valid response */
+	int                   query_id;            /* DNS query ID dedicated for this resolution */
+	struct eb32_node      qid;                 /* ebtree query id */
+	int                   prefered_query_type; /* prefered query type */
+	int                   query_type;          /* current query type  */
+	int                   status;              /* status of the resolution being processed RSLV_STATUS_* */
+	int                   step;                /* RSLV_STEP_* */
+	int                   try;                 /* current resolution try */
+	int                   nb_queries;          /* count number of queries sent */
+	int                   nb_responses;        /* count number of responses received */
+
+	struct dns_response_packet response; /* structure hosting the DNS response */
+	struct dns_query_item response_query_records[DNS_MAX_QUERY_RECORDS]; /* <response> query records */
+
+	struct list list; /* resolution list */
 };
 
-/*
- * structure used to describe the owner of a DNS resolution.
- */
+/* Structure used to describe the owner of a DNS resolution. */
 struct dns_requester {
-	struct list list;		/* requester list */
-	enum obj_type *requester;	/* pointer to the requester */
-	int prefered_query_type;	/* prefered query type */
-	int (*requester_cb)(struct dns_requester *, struct dns_nameserver *);
-					/* requester callback for valid response */
-	int (*requester_error_cb)(struct dns_requester *, int);
-					/* requester callback, for error management */
+	enum obj_type         *owner;       /* pointer to the owner (server or dns_srvrq) */
+	struct dns_resolution *resolution;  /* pointer to the owned DNS resolution */
+
+	int (*requester_cb)(struct dns_requester *, struct dns_nameserver *); /* requester callback for valid response */
+	int (*requester_error_cb)(struct dns_requester *, int);               /* requester callback, for error management */
+
+	struct list list; /* requester list */
 };
 
-/* last resolution status code */
+/* Last resolution status code */
 enum {
-	RSLV_STATUS_NONE	= 0,	/* no resolution occured yet */
-	RSLV_STATUS_VALID,		/* no error */
-	RSLV_STATUS_INVALID,		/* invalid responses */
-	RSLV_STATUS_ERROR,		/* error */
-	RSLV_STATUS_NX,			/* NXDOMAIN */
-	RSLV_STATUS_REFUSED,		/* server refused our query */
-	RSLV_STATUS_TIMEOUT,		/* no response from DNS servers */
-	RSLV_STATUS_OTHER,		/* other errors */
+	RSLV_STATUS_NONE = 0,  /* no resolution occured yet */
+	RSLV_STATUS_VALID,     /* no error */
+	RSLV_STATUS_INVALID,   /* invalid responses */
+	RSLV_STATUS_ERROR,     /* error */
+	RSLV_STATUS_NX,        /* NXDOMAIN */
+	RSLV_STATUS_REFUSED,   /* server refused our query */
+	RSLV_STATUS_TIMEOUT,   /* no response from DNS servers */
+	RSLV_STATUS_OTHER,     /* other errors */
 };
 
-/* current resolution step */
+/* Current resolution step */
 enum {
-	RSLV_STEP_NONE		= 0,	/* nothing happening currently */
-	RSLV_STEP_RUNNING,		/* resolution is running */
+	RSLV_STEP_NONE = 0,    /* nothing happening currently */
+	RSLV_STEP_RUNNING,     /* resolution is running */
 };
 
-/* return codes after analyzing a DNS response */
+/* Return codes after analyzing a DNS response */
 enum {
-	DNS_RESP_VALID		= 0,	/* valid response */
-	DNS_RESP_INVALID,		/* invalid response (various type of errors can trigger it) */
-	DNS_RESP_ERROR,			/* DNS error code */
-	DNS_RESP_NX_DOMAIN,		/* resolution unsuccessful */
-	DNS_RESP_REFUSED,		/* DNS server refused to answer */
-	DNS_RESP_ANCOUNT_ZERO,		/* no answers in the response */
-	DNS_RESP_WRONG_NAME,		/* response does not match query name */
-	DNS_RESP_CNAME_ERROR,		/* error when resolving a CNAME in an atomic response */
-	DNS_RESP_TIMEOUT,		/* DNS server has not answered in time */
-	DNS_RESP_TRUNCATED,		/* DNS response is truncated */
-	DNS_RESP_NO_EXPECTED_RECORD,	/* No expected records were found in the response */
-	DNS_RESP_QUERY_COUNT_ERROR,	/* we did not get the expected number of queries in the response */
-	DNS_RESP_INTERNAL,		/* internal resolver error */
+	DNS_RESP_VALID = 0,          /* valid response */
+	DNS_RESP_INVALID,            /* invalid response (various type of errors can trigger it) */
+	DNS_RESP_ERROR,              /* DNS error code */
+	DNS_RESP_NX_DOMAIN,          /* resolution unsuccessful */
+	DNS_RESP_REFUSED,            /* DNS server refused to answer */
+	DNS_RESP_ANCOUNT_ZERO,       /* no answers in the response */
+	DNS_RESP_WRONG_NAME,         /* response does not match query name */
+	DNS_RESP_CNAME_ERROR,        /* error when resolving a CNAME in an atomic response */
+	DNS_RESP_TIMEOUT,            /* DNS server has not answered in time */
+	DNS_RESP_TRUNCATED,          /* DNS response is truncated */
+	DNS_RESP_NO_EXPECTED_RECORD, /* No expected records were found in the response */
+        DNS_RESP_QUERY_COUNT_ERROR,  /* we did not get the expected number of queries in the response */
+        DNS_RESP_INTERNAL,           /* internal resolver error */
 };
 
-/* return codes after searching an IP in a DNS response buffer, using a family preference */
+/* Return codes after searching an IP in a DNS response buffer, using a family
+ * preference
+ */
 enum {
-	DNS_UPD_NO 		= 1,	/* provided IP was found and preference is matched
-					 * OR provided IP found and preference is not matched, but no IP
-					 *    matching preference was found */
-	DNS_UPD_SRVIP_NOT_FOUND,	/* provided IP not found
-					 * OR provided IP found and preference is not match and an IP
-					 *    matching preference was found */
-	DNS_UPD_CNAME,			/* CNAME without any IP provided in the response */
-	DNS_UPD_NAME_ERROR,		/* name in the response did not match the query */
-	DNS_UPD_NO_IP_FOUND,		/* no IP could be found in the response */
-	DNS_UPD_OBSOLETE_IP,		/* The server IP was obsolete, and no other IP was found */
+	DNS_UPD_NO = 1,           /* provided IP was found and preference is matched
+                                   * OR provided IP found and preference is not matched, but no IP
+                                   * matching preference was found */
+	DNS_UPD_SRVIP_NOT_FOUND,  /* provided IP not found
+                                   * OR provided IP found and preference is not match and an IP
+                                   * matching preference was found */
+	DNS_UPD_CNAME,            /* CNAME without any IP provided in the response */
+	DNS_UPD_NAME_ERROR,       /* name in the response did not match the query */
+	DNS_UPD_NO_IP_FOUND,      /* no IP could be found in the response */
+	DNS_UPD_OBSOLETE_IP,      /* The server IP was obsolete, and no other IP was found */
 };
 
 struct dns_srvrq {
-	enum obj_type obj_type;			/* object type == OBJ_TYPE_SRVRQ */
-	struct dns_resolvers *resolvers;	/* pointer to the resolvers structure used for this server template */
-
-	struct dns_resolution *resolution;	/* server name resolution */
-
-	struct proxy *proxy;			/* associated proxy */
-	char *name;
-	char *hostname_dn;			/* server hostname in Domain Name format */
-	int hostname_dn_len;			/* string length of the server hostname in Domain Name format */
-	struct dns_requester *dns_requester;	/* used to link to its DNS resolution */
-	int inter;				/* time in ms */
-	struct list list;			/* Next SRV RQ for the same proxy */
+	enum obj_type         obj_type;         /* object type == OBJ_TYPE_SRVRQ */
+	struct dns_resolvers *resolvers;        /* pointer to the resolvers structure used for this server template */
+	struct proxy         *proxy;            /* associated proxy */
+	char                 *name;
+	char                 *hostname_dn;      /* server hostname in Domain Name format */
+	int                   hostname_dn_len;  /* string length of the server hostname in Domain Name format */
+	struct dns_requester *dns_requester;    /* used to link to its DNS resolution */
+	struct list list;                       /* Next SRV RQ for the same proxy */
 };
 
 #endif /* _TYPES_DNS_H */
diff --git a/include/types/global.h b/include/types/global.h
index 37fbaca..03a7282 100644
--- a/include/types/global.h
+++ b/include/types/global.h
@@ -183,7 +183,6 @@
 extern struct list global_listener_queue; /* list of the temporarily limited listeners */
 extern struct task *global_listener_queue_task;
 extern unsigned int warned;     /* bitfield of a few warnings to emit just once */
-extern struct list dns_resolvers;
 
 /* bit values to go with "warned" above */
 #define WARN_BLOCK_DEPRECATED       0x00000001
diff --git a/include/types/proxy.h b/include/types/proxy.h
index a4f3b9e..5306a3b 100644
--- a/include/types/proxy.h
+++ b/include/types/proxy.h
@@ -438,7 +438,6 @@
 						 * name is used
 						 */
 	struct list filter_configs;		/* list of the filters that are declared on this proxy */
-	struct list srvrq_list;			/* List of SRV requests associated with this proxy */
 };
 
 struct switching_rule {
diff --git a/include/types/server.h b/include/types/server.h
index cdc3359..69397c1 100644
--- a/include/types/server.h
+++ b/include/types/server.h
@@ -262,7 +262,6 @@
 	char *hostname_dn;			/* server hostname in Domain Name format */
 	int hostname_dn_len;			/* sting lenght of the server hostname in Domain Name format */
 	char *lastaddr;				/* the address string provided by the server-state file */
-	struct dns_resolution *resolution;	/* server name resolution */
 	struct dns_options dns_opts;
 	struct sockaddr_storage init_addr;	/* plain IP address specified on the init-addr line */
 	unsigned int init_addr_methods;		/* initial address setting, 3-bit per method, ends at 0, enough to store 10 entries */
