diff --git a/include/types/proxy.h b/include/types/proxy.h
index 5ba68c7..7579d8a 100644
--- a/include/types/proxy.h
+++ b/include/types/proxy.h
@@ -46,7 +46,7 @@
 #include <types/log.h>
 #include <haproxy/sample-t.h>
 #include <types/server.h>
-#include <types/stick_table.h>
+#include <haproxy/stick_table-t.h>
 
 /* values for proxy->state */
 enum pr_state {
diff --git a/include/types/session.h b/include/types/session.h
index 559e786..3942d62 100644
--- a/include/types/session.h
+++ b/include/types/session.h
@@ -33,7 +33,7 @@
 #include <haproxy/obj_type-t.h>
 #include <haproxy/vars-t.h>
 
-#include <types/stick_table.h>
+#include <haproxy/stick_table-t.h>
 #include <haproxy/task-t.h>
 
 struct sess_srv_list {
diff --git a/include/types/stick_table.h b/include/types/stick_table.h
deleted file mode 100644
index 2918381..0000000
--- a/include/types/stick_table.h
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * include/types/stick_table.h
- * Macros, variables and structures for stick tables management.
- *
- * Copyright (C) 2009-2010 EXCELIANCE, Emeric Brun <ebrun@exceliance.fr>
- * Copyright (C) 2010 Willy Tarreau <w@1wt.eu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation, version 2.1
- * exclusively.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifndef _TYPES_STICK_TABLE_H
-#define _TYPES_STICK_TABLE_H
-
-#include <sys/socket.h>
-#include <netinet/in.h>
-
-#include <import/ebtree.h>
-#include <import/ebmbtree.h>
-#include <import/eb32tree.h>
-#include <haproxy/dict-t.h>
-#include <haproxy/pool-t.h>
-#include <haproxy/freq_ctr-t.h>
-#include <haproxy/peers-t.h>
-#include <haproxy/sample-t.h>
-
-/* The types of extra data we can store in a stick table */
-enum {
-	STKTABLE_DT_SERVER_ID,    /* the server ID to use with this stream if > 0 */
-	STKTABLE_DT_GPT0,         /* General Purpose Flag 0. */
-	STKTABLE_DT_GPC0,         /* General Purpose Counter 0 (unsigned 32-bit integer) */
-	STKTABLE_DT_GPC0_RATE,    /* General Purpose Counter 0's event rate */
-	STKTABLE_DT_CONN_CNT,     /* cumulated number of connections */
-	STKTABLE_DT_CONN_RATE,    /* incoming connection rate */
-	STKTABLE_DT_CONN_CUR,     /* concurrent number of connections */
-	STKTABLE_DT_SESS_CNT,     /* cumulated number of sessions (accepted connections) */
-	STKTABLE_DT_SESS_RATE,    /* accepted sessions rate */
-	STKTABLE_DT_HTTP_REQ_CNT, /* cumulated number of incoming HTTP requests */
-	STKTABLE_DT_HTTP_REQ_RATE,/* incoming HTTP request rate */
-	STKTABLE_DT_HTTP_ERR_CNT, /* cumulated number of HTTP requests errors (4xx) */
-	STKTABLE_DT_HTTP_ERR_RATE,/* HTTP request error rate */
-	STKTABLE_DT_BYTES_IN_CNT, /* cumulated bytes count from client to servers */
-	STKTABLE_DT_BYTES_IN_RATE,/* bytes rate from client to servers */
-	STKTABLE_DT_BYTES_OUT_CNT,/* cumulated bytes count from servers to client */
-	STKTABLE_DT_BYTES_OUT_RATE,/* bytes rate from servers to client */
-	STKTABLE_DT_GPC1,         /* General Purpose Counter 1 (unsigned 32-bit integer) */
-	STKTABLE_DT_GPC1_RATE,    /* General Purpose Counter 1's event rate */
-	STKTABLE_DT_SERVER_NAME,  /* The server name */
-	STKTABLE_STATIC_DATA_TYPES,/* number of types above */
-	/* up to STKTABLE_EXTRA_DATA_TYPES types may be registered here, always
-	 * followed by the number of data types, must always be last.
-	 */
-	STKTABLE_DATA_TYPES = STKTABLE_STATIC_DATA_TYPES + STKTABLE_EXTRA_DATA_TYPES
-};
-
-/* The equivalent standard types of the stored data */
-enum {
-	STD_T_SINT = 0,           /* data is of type signed int */
-	STD_T_UINT,               /* data is of type unsigned int */
-	STD_T_ULL,                /* data is of type unsigned long long */
-	STD_T_FRQP,               /* data is of type freq_ctr_period */
-	STD_T_DICT,               /* data is of type key of dictionary entry */
-};
-
-/* The types of optional arguments to stored data */
-enum {
-	ARG_T_NONE = 0,           /* data type takes no argument (default) */
-	ARG_T_INT,                /* signed integer */
-	ARG_T_DELAY,              /* a delay which supports time units */
-};
-
-/* stick_table extra data. This is mainly used for casting or size computation */
-union stktable_data {
-	/* standard types for easy casting */
-	int std_t_sint;
-	unsigned int std_t_uint;
-	unsigned long long std_t_ull;
-	struct freq_ctr_period std_t_frqp;
-	struct dict_entry *std_t_dict;
-
-	/* types of each storable data */
-	int server_id;
-	struct dict_entry *server_name;
-	unsigned int gpt0;
-	unsigned int gpc0;
-	struct freq_ctr_period gpc0_rate;
-	unsigned int gpc1;
-	struct freq_ctr_period gpc1_rate;
-	unsigned int conn_cnt;
-	struct freq_ctr_period conn_rate;
-	unsigned int conn_cur;
-	unsigned int sess_cnt;
-	struct freq_ctr_period sess_rate;
-	unsigned int http_req_cnt;
-	struct freq_ctr_period http_req_rate;
-	unsigned int http_err_cnt;
-	struct freq_ctr_period http_err_rate;
-	unsigned long long bytes_in_cnt;
-	struct freq_ctr_period bytes_in_rate;
-	unsigned long long bytes_out_cnt;
-	struct freq_ctr_period bytes_out_rate;
-};
-
-/* known data types */
-struct stktable_data_type {
-	const char *name; /* name of the data type */
-	int std_type;     /* standard type we can use for this data, STD_T_* */
-	int arg_type;     /* type of optional argument, ARG_T_* */
-};
-
-/* stick table key type flags */
-#define STK_F_CUSTOM_KEYSIZE      0x00000001   /* this table's key size is configurable */
-
-/* stick table keyword type */
-struct stktable_type {
-	const char *kw;           /* keyword string */
-	int flags;                /* type flags */
-	size_t default_size;      /* default key size */
-};
-
-extern struct stktable_type stktable_types[];
-
-/* Sticky session.
- * Any additional data related to the stuck session is installed *before*
- * stksess (with negative offsets). This allows us to run variable-sized
- * keys and variable-sized data without making use of intermediate pointers.
- */
-struct stksess {
-	unsigned int expire;      /* session expiration date */
-	unsigned int ref_cnt;     /* reference count, can only purge when zero */
-	__decl_thread(HA_RWLOCK_T lock); /* lock related to the table entry */
-	struct eb32_node exp;     /* ebtree node used to hold the session in expiration tree */
-	struct eb32_node upd;     /* ebtree node used to hold the update sequence tree */
-	struct ebmb_node key;     /* ebtree node used to hold the session in table */
-	/* WARNING! do not put anything after <keys>, it's used by the key */
-};
-
-
-/* stick table */
-struct stktable {
-	char *id;		  /* local table id name. */
-	char *nid;		  /* table id name sent over the network with peers protocol. */
-	struct stktable *next;    /* The stick-table may be linked when belonging to
-	                           * the same configuration section.
-	                           */
-	struct {
-		const char *file;     /* The file where the stick-table is declared. */
-		int line;             /* The line in this <file> the stick-table is declared. */
-	} conf;
-	struct ebpt_node name;    /* Stick-table are lookup by name here. */
-	struct eb_root keys;      /* head of sticky session tree */
-	struct eb_root exps;      /* head of sticky session expiration tree */
-	struct eb_root updates;   /* head of sticky updates sequence tree */
-	struct pool_head *pool;   /* pool used to allocate sticky sessions */
-	__decl_thread(HA_SPINLOCK_T lock); /* spin lock related to the table */
-	struct task *exp_task;    /* expiration task */
-	struct task *sync_task;   /* sync task */
-	unsigned int update;
-	unsigned int localupdate;
-	unsigned int commitupdate;/* used to identify the latest local updates
-				     pending for sync */
-	unsigned int syncing;     /* number of sync tasks watching this table now */
-	union {
-		struct peers *p; /* sync peers */
-		char *name;
-	} peers;
-
-	unsigned long type;       /* type of table (determines key format) */
-	size_t key_size;          /* size of a key, maximum size in case of string */
-	unsigned int size;        /* maximum number of sticky sessions in table */
-	unsigned int current;     /* number of sticky sessions currently in table */
-	int nopurge;              /* if non-zero, don't purge sticky sessions when full */
-	int exp_next;             /* next expiration date (ticks) */
-	int expire;               /* time to live for sticky sessions (milliseconds) */
-	int data_size;            /* the size of the data that is prepended *before* stksess */
-	int data_ofs[STKTABLE_DATA_TYPES]; /* negative offsets of present data types, or 0 if absent */
-	union {
-		int i;
-		unsigned int u;
-		void *p;
-	} data_arg[STKTABLE_DATA_TYPES]; /* optional argument of each data type */
-	struct proxy *proxy;      /* The proxy this stick-table is attached to, if any.*/
-	struct proxy *proxies_list; /* The list of proxies which reference this stick-table. */
-};
-
-extern struct stktable_data_type stktable_data_types[STKTABLE_DATA_TYPES];
-
-/* stick table key */
-struct stktable_key {
-	void *key;                      /* pointer on key buffer */
-	size_t key_len;                 /* data len to read in buff in case of null terminated string */
-};
-
-/* WARNING: if new fields are added, they must be initialized in stream_accept()
- * and freed in stream_free() !
- *
- * What's the purpose of there two macro:
- *   - STKCTR_TRACK_BACKEND indicates that a tracking pointer was set from the backend
- *    and thus that when a keep-alive request goes to another backend, the track
- *    must cease.
- *
- *   - STKCTR_TRACK_CONTENT indicates that the tracking pointer was set in a
- *    content-aware rule (tcp-request content or http-request) and that the
- *    tracking has to be performed in the stream and not in the session, and
- *    will cease for a new keep-alive request over the same connection.
- */
-#define STKCTR_TRACK_BACKEND 1
-#define STKCTR_TRACK_CONTENT 2
-
-/* stick counter. The <entry> member is a composite address (caddr) made of a
- * pointer to an stksess struct, and two flags among STKCTR_TRACK_* above.
- */
-struct stkctr {
-	unsigned long   entry;          /* entry containing counters currently being tracked by this stream  */
-	struct stktable *table;         /* table the counters above belong to (undefined if counters are null) */
-};
-
-/* parameters to configure tracked counters */
-struct track_ctr_prm {
-	struct sample_expr *expr;		/* expression used as the key */
-	union {
-		struct stktable *t;		/* a pointer to the table */
-		char *n;			/* or its name during parsing. */
-	} table;
-};
-
-#endif /* _TYPES_STICK_TABLE_H */
diff --git a/include/types/stream.h b/include/types/stream.h
index e2e01db..1a99429 100644
--- a/include/types/stream.h
+++ b/include/types/stream.h
@@ -44,7 +44,7 @@
 #include <types/session.h>
 #include <types/stream_interface.h>
 #include <haproxy/task-t.h>
-#include <types/stick_table.h>
+#include <haproxy/stick_table-t.h>
 
 /* Various Stream Flags, bits values 0x01 to 0x100 (shift 0) */
 #define SF_DIRECT	0x00000001	/* connection made on the server matching the client cookie */
