* released 1.2.5-pre1
* build fixes for appsession
* documentation for appsession
diff --git a/doc/haproxy-en.txt b/doc/haproxy-en.txt
index 2cb73d2..ab14dcf 100644
--- a/doc/haproxy-en.txt
+++ b/doc/haproxy-en.txt
@@ -100,6 +100,7 @@
   - debug
   - quiet
   - pidfile <file>
+  - stats
 
 1.1) Event logging
 ------------------
@@ -623,6 +624,33 @@
 Warning : the syntax has changed since version 1.0 !
 ---------
 
+2.11) Application Cookies
+-------------------------
+Since 1.2.4 it is possible to catch the cookie that comes from an
+application server in order to apply "application session stickyness".
+The server's response is searched for 'appsession' cookie, the first
+'len' bytes are used for matching and it is stored for a period of
+'timeout'.
+The syntax is:
+
+    appsession <SESSIONCOOKIE> len <MATCHLENGTH> timeout <HOLDTIME>
+
+- <SESSIONCOOKIE> is the cookie, the server uses for it's session-handling
+- <MATCHLENGTH> how many bytes/characters should be used for matching equal
+                sessions 
+- <HOLDTIME> after this inactivaty time, in ms, the cookie will be deleted 
+             from the sessionstore
+
+The appsession is only per 'listen' section possible.
+
+Example :
+---------
+    listen http_proxy :80
+	mode http
+        appsession JSESSIONID len 52 timeout 300000
+        .
+        .
+
 3) Autonomous load balancer
 ===========================
 
@@ -1448,8 +1476,8 @@
 	mode http
 	cookie SERVERID insert nocache indirect
 	balance roundrobin
-	server 192.168.1.1:80 cookie server01 check
-	server 192.168.1.2:80 cookie server02 check
+	server srv1 192.168.1.1:80 cookie server01 check
+	server srv2 192.168.1.2:80 cookie server02 check
 
 The other solution brought by versions 1.1.30 and 1.2.3 is to reuse a cookie
 from the server, and prefix the server's name to it. In this case, don't forget
@@ -1460,8 +1488,8 @@
 	mode http
 	cookie JSESSIONID prefix
 	balance roundrobin
-	server 192.168.1.1:80 cookie srv1 check
-	server 192.168.1.2:80 cookie srv2 check
+	server srv1 192.168.1.1:80 cookie srv1 check
+	server srv2 192.168.1.2:80 cookie srv2 check
 	option httpclose
 
 
diff --git a/doc/haproxy-fr.txt b/doc/haproxy-fr.txt
index 28687bb..1db2bc4 100644
--- a/doc/haproxy-fr.txt
+++ b/doc/haproxy-fr.txt
@@ -1497,8 +1497,8 @@
 	mode http
 	cookie SERVERID insert nocache indirect
 	balance roundrobin
-	server 192.168.1.1:80 cookie server01 check
-	server 192.168.1.2:80 cookie server02 check
+	server srv1 192.168.1.1:80 cookie server01 check
+	server srv2 192.168.1.2:80 cookie server02 check
 
 L'autre solution apportée par les versions 1.1.30 et 1.2.3 est de réutiliser un
 cookie en provenance du serveur et de lui préfixer l'identifiant du serveur.
@@ -1510,8 +1510,8 @@
        mode http
        cookie JSESSIONID prefix
        balance roundrobin
-       server 192.168.1.1:80 cookie srv1 check
-       server 192.168.1.2:80 cookie srv2 check
+       server srv1 192.168.1.1:80 cookie srv1 check
+       server srv2 192.168.1.2:80 cookie srv2 check
        option httpclose
 
 
diff --git a/haproxy.c b/haproxy.c
index 87c4145..1445d1b 100644
--- a/haproxy.c
+++ b/haproxy.c
@@ -61,45 +61,7 @@
 #include <strings.h>
 #endif
 
-#define TBLSIZ 10
-#define TBLCHKINT 5000 /* The time between two calls of appsession_refresh in ms */
-
-/*
-  These Parts are copied from
-  
-  http://www.oreilly.com/catalog/masteralgoc/index.html
-  Mastering Algorithms with C
-  By Kyle Loudon
-  ISBN: 1-56592-453-3
-  Publishd by O'Reilly
-
-  We have added our own struct to these function.
- */
-
-#include <include/list.h>
-#include <include/chtbl.h>
-#include <include/hashpjw.h>
-/* end of copied parts */
-
-struct app_pool {
-    void **sessid;
-    void **serverid;
-    int ses_waste, ses_use, ses_msize;
-    int ser_waste, ser_use, ser_msize;
-};
-
-struct app_pool apools;
-int have_appsession;
-
-/* Callback for hash_lookup */
-int match_str(const void *key1, const void *key2);
-
-/* Callback for destroy */
-void destroy(void *data);
-
-#if defined(DEBUG_HASH)
-static void print_table(const CHTbl *htbl);
-#endif
+#include "include/appsession.h"
 
 #define HAPROXY_VERSION "1.2.4"
 #define HAPROXY_DATE	"2005/01/22"
@@ -2956,12 +2918,11 @@
 		        srv = srv->next;
 		    }/* end while(srv) */
 		}/* end else of if (asession_temp->serverid == NULL) */
-		
-		method_checked = 1;
 	      }/* end if(strncasecmp(request_line,t->proxy->appsession_name,apssesion_name_len) == 0) */
 	      else {
 		//fprintf(stderr,">>>>>>>>>>>>>>>>>>>>>>NO SESSION\n");
 	      }
+	      method_checked = 1;
 	    }/* end if(!method_checked ...) */
 	    else{
 	      //printf("No Methode-Header with Session-String\n");
@@ -3311,7 +3272,6 @@
 			    }/* end else if server == NULL */
 			    
 			    tv_delayfrom(&asession_temp->expire, &now, t->proxy->appsession_timeout);
-			    break;
 			}/* end if ((t->proxy->appsession_name != NULL) ... */
 		    }
 
diff --git a/include/appsession.h b/include/appsession.h
new file mode 100644
index 0000000..8a31034
--- /dev/null
+++ b/include/appsession.h
@@ -0,0 +1,44 @@
+#ifndef _APPSESS_H
+#define _APPSESS_H
+
+#define TBLSIZ 10
+#define TBLCHKINT 5000 /* The time between two calls of appsession_refresh in ms */
+
+/*
+  These Parts are copied from
+  
+  http://www.oreilly.com/catalog/masteralgoc/index.html
+  Mastering Algorithms with C
+  By Kyle Loudon
+  ISBN: 1-56592-453-3
+  Publishd by O'Reilly
+
+  We have added our own struct to these function.
+ */
+
+#include <include/list.h>
+#include <include/chtbl.h>
+#include <include/hashpjw.h>
+/* end of copied parts */
+
+struct app_pool {
+    void **sessid;
+    void **serverid;
+    int ses_waste, ses_use, ses_msize;
+    int ser_waste, ser_use, ser_msize;
+};
+
+struct app_pool apools;
+int have_appsession;
+
+/* Callback for hash_lookup */
+int match_str(const void *key1, const void *key2);
+
+/* Callback for destroy */
+void destroy(void *data);
+
+#if defined(DEBUG_HASH)
+static void print_table(const CHTbl *htbl);
+#endif
+
+#endif
diff --git a/src/hashpjw.c b/src/hashpjw.c
index ef7f209..a207eb9 100644
--- a/src/hashpjw.c
+++ b/src/hashpjw.c
@@ -28,7 +28,7 @@
 
   const char         *ptr;
   unsigned int        val;
-  AppSess *appsession_temp;
+  appsess *appsession_temp;
 
   /*****************************************************************************
    *                                                                            *
@@ -37,7 +37,7 @@
    *****************************************************************************/
 
   val = 0;
-  appsession_temp = (AppSess *)key;
+  appsession_temp = (appsess *)key;
   ptr = appsession_temp->sessid;
 
   while (*ptr != '\0') {