towards 1.6b1
diff --git a/Modules/sre.h b/Modules/sre.h
index 3664c9d..a5f0aeb 100644
--- a/Modules/sre.h
+++ b/Modules/sre.h
@@ -14,6 +14,9 @@
 
 #include "sre_constants.h"
 
+/* size of a code word (must be unsigned short or larger) */
+#define SRE_CODE unsigned short
+
 typedef struct {
     PyObject_HEAD
     PyObject* code; /* link to the code string object */
@@ -35,6 +38,14 @@
     int mark[2];
 } MatchObject;
 
+typedef unsigned int (*SRE_TOLOWER_HOOK)(unsigned int ch);
+
+typedef struct {
+    /* stack elements */
+    SRE_CODE* pattern;
+    void* ptr;
+} SRE_STACK;
+
 typedef struct {
     /* string pointers */
     void* ptr; /* current position (also end of current slice) */
@@ -44,15 +55,18 @@
     /* character size */
     int charsize;
     /* registers */
-    int marks;
+    int lastmark;
     void* mark[64]; /* FIXME: <fl> should be dynamically allocated! */
     /* backtracking stack */
-    void** stack;
+    SRE_STACK* stack;
     int stacksize;
     int stackbase;
+    /* hooks */
+    SRE_TOLOWER_HOOK tolower;
 } SRE_STATE;
 
 typedef struct {
+    /* search helper */
     PyObject_HEAD
     PyObject* pattern;
     PyObject* string;
diff --git a/Modules/sre_constants.h b/Modules/sre_constants.h
index c6b123e..01c8448 100644
--- a/Modules/sre_constants.h
+++ b/Modules/sre_constants.h
@@ -11,20 +11,19 @@
 #define SRE_OP_GROUP_IGNORE 9
 #define SRE_OP_IN 10
 #define SRE_OP_IN_IGNORE 11
-#define SRE_OP_JUMP 12
-#define SRE_OP_LITERAL 13
-#define SRE_OP_LITERAL_IGNORE 14
-#define SRE_OP_MARK 15
-#define SRE_OP_MAX_REPEAT 16
-#define SRE_OP_MAX_UNTIL 17
+#define SRE_OP_INFO 12
+#define SRE_OP_JUMP 13
+#define SRE_OP_LITERAL 14
+#define SRE_OP_LITERAL_IGNORE 15
+#define SRE_OP_MARK 16
+#define SRE_OP_MAX_REPEAT 17
 #define SRE_OP_MAX_REPEAT_ONE 18
 #define SRE_OP_MIN_REPEAT 19
-#define SRE_OP_MIN_UNTIL 20
-#define SRE_OP_NOT_LITERAL 21
-#define SRE_OP_NOT_LITERAL_IGNORE 22
-#define SRE_OP_NEGATE 23
-#define SRE_OP_RANGE 24
-#define SRE_OP_REPEAT 25
+#define SRE_OP_NOT_LITERAL 20
+#define SRE_OP_NOT_LITERAL_IGNORE 21
+#define SRE_OP_NEGATE 22
+#define SRE_OP_RANGE 23
+#define SRE_OP_REPEAT 24
 #define SRE_AT_BEGINNING 0
 #define SRE_AT_BEGINNING_LINE 1
 #define SRE_AT_BOUNDARY 2
@@ -39,11 +38,20 @@
 #define SRE_CATEGORY_NOT_WORD 5
 #define SRE_CATEGORY_LINEBREAK 6
 #define SRE_CATEGORY_NOT_LINEBREAK 7
-#define SRE_CATEGORY_LOC_DIGIT 8
-#define SRE_CATEGORY_LOC_NOT_DIGIT 9
-#define SRE_CATEGORY_LOC_SPACE 10
-#define SRE_CATEGORY_LOC_NOT_SPACE 11
-#define SRE_CATEGORY_LOC_WORD 12
-#define SRE_CATEGORY_LOC_NOT_WORD 13
-#define SRE_CATEGORY_LOC_LINEBREAK 14
-#define SRE_CATEGORY_LOC_NOT_LINEBREAK 15
+#define SRE_CATEGORY_LOC_WORD 8
+#define SRE_CATEGORY_LOC_NOT_WORD 9
+#define SRE_CATEGORY_UNI_DIGIT 10
+#define SRE_CATEGORY_UNI_NOT_DIGIT 11
+#define SRE_CATEGORY_UNI_SPACE 12
+#define SRE_CATEGORY_UNI_NOT_SPACE 13
+#define SRE_CATEGORY_UNI_WORD 14
+#define SRE_CATEGORY_UNI_NOT_WORD 15
+#define SRE_CATEGORY_UNI_LINEBREAK 16
+#define SRE_CATEGORY_UNI_NOT_LINEBREAK 17
+#define SRE_FLAG_TEMPLATE 1
+#define SRE_FLAG_IGNORECASE 2
+#define SRE_FLAG_LOCALE 4
+#define SRE_FLAG_MULTILINE 8
+#define SRE_FLAG_DOTALL 16
+#define SRE_FLAG_UNICODE 32
+#define SRE_FLAG_VERBOSE 64