diff --git a/ROADMAP b/ROADMAP
index f5c638f..2231716 100644
--- a/ROADMAP
+++ b/ROADMAP
@@ -1,112 +1,99 @@
-'+' = done, '-' = todo, '*' = done except doc
+Medium-long term roadmap - 2010/04/10
 
-1.2.12 :
- + weighted RR/SH
+Legend: '+' = done, '-' = todo, '*' = done except doc
 
-1.2.13 :
- + maxconn
- + queueing
+1.5 (ETA 2010/12/31) :
+  - server-side HTTP keepalive
 
-1.2.14 :
- + HTML status page
+  - return-html code xxx [ file "xxx" | text "xxx" ] if <acl>
 
-        stats enable
-        stats uri /?stats  
-        stats realm w.ods.org\ statistics
-        stats auth user1:pass1
-        stats auth user2:pass2
-        stats auth user3:pass3
-        stats scope <px_id> | '.'
+  - return-raw  [ file "xxx" | text "xxx" ] if <acl>
 
- + allow server-less proxies (for stats)
+  - add support for client-side and server-side unix sockets
 
- - separate timeout controls
+  - try to remove srv==NULL internally and assign a dummy server to each backend
+    for dispatch, http_proxy and transparent modes.
 
- + option 'abortonclose' : if the session is queued or being connecting
-   to the server, and the client sends a shutdown(), then decide to abort
-   the session early because in most situations, this will be caused by
-   a client hitting the 'Stop' button, so there's no reason to overload
-   the servers with unservable requests. However, this is not HTTP compliant
-   and might cause little trouble to some very specific clients used to
-   close immediately after sending the request (no support for KA, which ones?)
+  - rename L4 acls as L6 ACLs when some content is involved
 
- + minconn : makes the server's maxconn dynamic, which will be computed as a
-   ratio of the proxy's sessions :
-     srv->effective_maxconn =
-          max(srv->maxconn * px->nbsess / px->maxconn, srv->minconn)
+  - add new L4 ACL checks immediately after accept, before even allocating the
+    buffers ("connection {accept|reject|delay|freeze} {if|unless}").
 
-1.2.15 :
- + monitor-uri : specify an URI for which we will always return 'HTTP/1.0 200'
-   and never forward nor log it.
+  - implement support for "connection freeze" after accept. A list of frozen
+    connections should be maintained so that it is possible to recycle them
+    when new file descriptors are required.
 
- + option ssl-hello-chk : send SSLv3 client hello messages to check the servers
+  - support for time-ordered priority queues with ability to add an offset
+    based on request matching. Each session will have one ebtree node to be
+    attached to whatever queue the session is waiting in.
 
-1.3 :
- - remove unused STATTIME
+  - assign a nice priority based on ACLs.
 
- - reference all the include files that must be created, possibly under subdirs :
+  - pattern extraction is needed for ACLs and stickiness. It would work like
+    this :
 
-   - acl.h      => more general ACL work
-   - appcook.h  => appsession-related cookies
-   - backend.h  => back-end part of the PR_O_* + backend definitions
-   - buffers.h  => buffer management relying on memory.h
-   - capture.h  => header and cookie capture
-   - cfgparse.h => configuration parser
-   - checks.h   => health checks
-   - clireq.h   => the client side "request" part of the current sessions.
-   - compat.h   => compatibility with other OSes (TCP_NODELAY, ...)
-   - config.h   => config parameters, renamed CONFIG_HAP_*, includes defaults.h
-   - controls.h => SN_CACHEABLE, ...
-   - cookies.h  => definitions related to cookie management + SN_SCK_*
-   - defaults.h => many default values, might disappear soon after cleanup
-   - frontend.h => front-end part of the PR_O_* + client definitions + listeners
-   - global.h   => shared global variables
-   - http.h     => HTTP state definitions and transitions
-   - httperr.{hc} => HTTP return codes
-   - libtask.h  => task scheduler
-   - libtime.h  => time-related definitions
-   - loadbal.h  => load balancing algorithms
-   - log.h      => log definitions
-   - memory.h   => pools
-   - polling.h  => definitions of select(), poll(), INTBITS, ...
-   - queue.h    => queue management
-   - regex.h    => filtering
-   - servers.h  => servers definitions (SRV_*, states, ...)
-   - fd.h       => FD_ST* (add FD_DGRAM), RES_*, socket states, etc...
-   - srvreq.h   => the server side "request" part of the current sessions.
-   - standard.h => general purpose macros and defines (eg: MIN/MAX, ...)
-   - startup.h  => MODE_*
-   - tuning.h   => platform-specific tuning parameters
+       acl <name> <pattern> [-i] <values>...
 
+    All ACL fetch method currently available would be transformed into pattern
+    extraction methods. That way we could stick on hdr(x-forwarded-for) or use
+    source 0.0.0.0 usesrc <pattern> (such as "hdr_ip(headername)"). Note that
+    ACLs sometimes need iterative matching/extraction.
 
- - clarify licence by adding a 'MODULE_LICENCE("GPL")' or something equivalent.
+  - add support for complex pattern extraction rules :
 
- - handle half-closed connections better (cli/srv would not distinguish
-   DATA/SHUTR/SHUTW, it would be a session flag which would tell shutr/shutw).
-   Check how it got changed in httpterm.
+       pattern = <pattern_term>
+               | '{' pattern_expr '}'
 
- - 3 memory models : failsafe (prealloc), normal (current), optimal (alloc on
-   demand)
+       pattern_expr = <pattern_term> [ <transform> ... ]
 
- - wait queues replaced for priority-based trees
+  - support loading data sets from files
+      + present/not present (eg: netmasks)
+      - pattern conversion per prefixes. Eg: convert src IP to country.
 
- - ability to assign a prio based on L7 matching
+  - make new patterns available based on stickiness matching :
+      - number of entries in table for the matched pattern
+      - same after having increased the match counter
 
- - prio-based O(1) scheduler
+  - add support for concurrency match in tables
+      - just like stickiness, but counted per session (or request), increased
+        on first match and decreased at end of request or connection. This
+        requires that the session has a list of matched terms that must be
+        released at the end.
 
- - maxconn reserve for VIP/admins
+1.6 (will probably change anyway) :
+  - wait on resource (mem, socket, server's conn, server's rate, ...)
 
- - verify if it would be worth implementing an epoll_ctl_batch() for Linux
+  - bandwidth limits
 
- - balance LC/WLC (patch available)
+  - create internal services and make stats, CLI, etc... part of that.
 
- - option minservers XXX : activates some backup servers when active servers
-   are insufficient
+  - use_server ... if ...
+
+  - buddy servers to build defined lists of failovers. Detect loops during
+    the config check.
+
+          server XXX buddy YYY
+          server YYY    # may replace XXX when XXX fails
+
+  - spare servers : servers which are used in LB only when a minimum farm
+    weight threshold is not satisfied anymore. Useful for inter-site LB with
+    local pref by default.
+
 
- - monitor minservers XXX : monitor-net and monitor-uri could report a failure
-   when the number of active servers is below this threshold.
+Old, maybe obsolete points
+ - clarify licence by adding a 'MODULE_LICENCE("GPL")' or something equivalent.
+
+ - 3 memory models : failsafe (prealloc), normal (current), optimal (alloc on
+   demand)
+
+ - ability to assign a task priority based on L7 matching
 
- - option smtp-chk : use SMTP health checks (avoid logs if possible)
+ - implement support for event-triggerred epoll()
+
+ - verify if it would be worth implementing an epoll_ctl_batch() for Linux
+
+ - option minservers XXX : activates some spare servers when active servers
+   are insufficient
 
  - new keyword 'check' : check http xxx, check smtp xxx, check ssl-hello
 
