Index: /trunk/processor/processor.m4
===================================================================
--- /trunk/processor/processor.m4	(revision 505)
+++ /trunk/processor/processor.m4	(revision 506)
@@ -699,4 +699,5 @@
 		PROC_ZSTRING_N(type, key, key_size)
 	')
+	DISPATCH(ulong, h)
 	STRUCT(zend_constant, constant)
 ')
@@ -711,4 +712,5 @@
 		PROC_ZSTRING_N(type, key, key_size)
 	')
+	DISPATCH(ulong, h)
 	STRUCT(zend_function, func)
 ')
@@ -722,4 +724,5 @@
 		PROC_ZSTRING_N(type, key, key_size)
 	')
+	DISPATCH(ulong, h)
 #ifdef ZEND_ENGINE_2
 	STRUCT_P(zend_class_entry, cest)
@@ -739,4 +742,5 @@
 		PROC_ZSTRING_L(type, key, key_len)
 	')
+	DISPATCH(ulong, h)
 ')
 dnl }}}
Index: /trunk/utils.c
===================================================================
--- /trunk/utils.c	(revision 505)
+++ /trunk/utils.c	(revision 506)
@@ -425,5 +425,5 @@
 
 #ifdef HAVE_XCACHE_CONSTANT
-void xc_install_constant(char *filename, zend_constant *constant, zend_uchar type, zstr key, uint len TSRMLS_DC) /* {{{ */
+void xc_install_constant(char *filename, zend_constant *constant, zend_uchar type, zstr key, uint len, ulong h TSRMLS_DC) /* {{{ */
 {
 	if (zend_u_hash_add(EG(zend_constants), type, key, len,
@@ -445,5 +445,5 @@
 /* }}} */
 #endif
-void xc_install_function(char *filename, zend_function *func, zend_uchar type, zstr key, uint len TSRMLS_DC) /* {{{ */
+void xc_install_function(char *filename, zend_function *func, zend_uchar type, zstr key, uint len, ulong h TSRMLS_DC) /* {{{ */
 {
 	zend_bool istmpkey;
@@ -475,5 +475,5 @@
 }
 /* }}} */
-ZESW(xc_cest_t *, void) xc_install_class(char *filename, xc_cest_t *cest, int oplineno, zend_uchar type, zstr key, uint len TSRMLS_DC) /* {{{ */
+ZESW(xc_cest_t *, void) xc_install_class(char *filename, xc_cest_t *cest, int oplineno, zend_uchar type, zstr key, uint len, ulong h TSRMLS_DC) /* {{{ */
 {
 	zend_bool istmpkey;
@@ -487,5 +487,5 @@
 #endif
 	if (istmpkey) {
-		zend_u_hash_update(CG(class_table), type, key, len,
+		zend_u_hash_quick_update(CG(class_table), type, key, len, h,
 					cest, sizeof(xc_cest_t),
 					ZESW(&stored_ce_ptr, NULL)
@@ -495,5 +495,5 @@
 		}
 	}
-	else if (zend_u_hash_add(CG(class_table), type, key, len,
+	else if (zend_u_hash_quick_add(CG(class_table), type, key, len, h,
 				cest, sizeof(xc_cest_t),
 				ZESW(&stored_ce_ptr, NULL)
@@ -685,5 +685,5 @@
 		zend_constant *c = (zend_constant*) b->pData;
 		xc_install_constant(sandbox->filename, c,
-				BUCKET_KEY_TYPE(b), ZSTR(BUCKET_KEY_S(b)), b->nKeyLength TSRMLS_CC);
+				BUCKET_KEY_TYPE(b), ZSTR(BUCKET_KEY_S(b)), b->nKeyLength, b->h TSRMLS_CC);
 		b = b->pListNext;
 	}
@@ -695,5 +695,5 @@
 		zend_function *func = (zend_function*) b->pData;
 		xc_install_function(sandbox->filename, func,
-				BUCKET_KEY_TYPE(b), ZSTR(BUCKET_KEY_S(b)), b->nKeyLength TSRMLS_CC);
+				BUCKET_KEY_TYPE(b), ZSTR(BUCKET_KEY_S(b)), b->nKeyLength, b->h TSRMLS_CC);
 		b = b->pListNext;
 	}
@@ -703,5 +703,5 @@
 	while (b != NULL) {
 		xc_install_class(sandbox->filename, (xc_cest_t*) b->pData, -1,
-				BUCKET_KEY_TYPE(b), ZSTR(BUCKET_KEY_S(b)), b->nKeyLength TSRMLS_CC);
+				BUCKET_KEY_TYPE(b), ZSTR(BUCKET_KEY_S(b)), b->nKeyLength, b->h TSRMLS_CC);
 		b = b->pListNext;
 	}
Index: /trunk/utils.h
===================================================================
--- /trunk/utils.h	(revision 505)
+++ /trunk/utils.h	(revision 506)
@@ -72,8 +72,8 @@
 /* installer */
 #ifdef HAVE_XCACHE_CONSTANT
-void xc_install_constant(char *filename, zend_constant *constant, zend_uchar type, zstr key, uint len TSRMLS_DC);
+void xc_install_constant(char *filename, zend_constant *constant, zend_uchar type, zstr key, uint len, ulong h TSRMLS_DC);
 #endif
-void xc_install_function(char *filename, zend_function *func, zend_uchar type, zstr key, uint len TSRMLS_DC);
-ZESW(xc_cest_t *, void) xc_install_class(char *filename, xc_cest_t *cest, int oplineno, zend_uchar type, zstr key, uint len TSRMLS_DC);
+void xc_install_function(char *filename, zend_function *func, zend_uchar type, zstr key, uint len, ulong h TSRMLS_DC);
+ZESW(xc_cest_t *, void) xc_install_class(char *filename, xc_cest_t *cest, int oplineno, zend_uchar type, zstr key, uint len, ulong h TSRMLS_DC);
 
 /* sandbox */
Index: /trunk/xcache.c
===================================================================
--- /trunk/xcache.c	(revision 505)
+++ /trunk/xcache.c	(revision 506)
@@ -622,5 +622,5 @@
 		xc_constinfo_t *ci = &p->constinfos[i];
 		xc_install_constant(xce->name.str.val, &ci->constant,
-				UNISW(0, ci->type), ci->key, ci->key_size TSRMLS_CC);
+				UNISW(0, ci->type), ci->key, ci->key_size, ci->h TSRMLS_CC);
 	}
 #endif
@@ -630,5 +630,5 @@
 		xc_funcinfo_t  *fi = &p->funcinfos[i];
 		xc_install_function(xce->name.str.val, &fi->func,
-				UNISW(0, fi->type), fi->key, fi->key_size TSRMLS_CC);
+				UNISW(0, fi->type), fi->key, fi->key_size, fi->h TSRMLS_CC);
 	}
 
@@ -647,5 +647,5 @@
 #endif
 		xc_install_class(xce->name.str.val, &ci->cest, ci->oplineno,
-				UNISW(0, ci->type), ci->key, ci->key_size TSRMLS_CC);
+				UNISW(0, ci->type), ci->key, ci->key_size, ci->h TSRMLS_CC);
 	}
 
@@ -656,5 +656,5 @@
 		/*
 		zend_auto_global *auto_global;
-		if (zend_u_hash_find(CG(auto_globals), aginfo->type, aginfo->key, aginfo->key_len+1, (void **) &auto_global)==SUCCESS) {
+		if (zend_u_hash_quick_find(CG(auto_globals), aginfo->type, aginfo->key, aginfo->key_len+1, aginfo->h, (void **) &auto_global)==SUCCESS) {
 			if (auto_global->armed) {
 				auto_global->armed = auto_global->auto_global_callback(auto_global->name, auto_global->name_len TSRMLS_CC);
@@ -1087,4 +1087,5 @@
 		}                                                     \
 		data->key_size   = b->nKeyLength;                     \
+		data->h          = b->h;                              \
 	}                                                         \
 } while(0)
@@ -1119,4 +1120,5 @@
 				}
 				data->key_len = b->nKeyLength - 1;
+				data->h       = b->h;
 			}
 		}
Index: /trunk/xcache.h
===================================================================
--- /trunk/xcache.h	(revision 505)
+++ /trunk/xcache.h	(revision 506)
@@ -141,6 +141,12 @@
  	   zend_hash_add(ht, arKey, nKeyLength, pData, nDataSize, pDest)
 
+#	define zend_u_hash_quick_add(ht, type, arKey, nKeyLength, h, pData, nDataSize, pDest) \
+ 	   zend_hash_quick_add(ht, arKey, nKeyLength, h, pData, nDataSize, pDest)
+
 #	define zend_u_hash_update(ht, type, arKey, nKeyLength, pData, nDataSize, pDest) \
  	   zend_hash_update(ht, arKey, nKeyLength, pData, nDataSize, pDest)
+
+#	define zend_u_hash_quick_update(ht, type, arKey, nKeyLength, h, pData, nDataSize, pDest) \
+ 	   zend_hash_quick_update(ht, arKey, nKeyLength, h, pData, nDataSize, pDest)
 
 #	define zend_u_hash_find(ht, type, arKey, nKeyLength, pData) \
@@ -227,4 +233,5 @@
 	zstr      key;
 	zend_uint key_size;
+	ulong     h;
 	xc_cest_t cest;
 	int       oplineno;
@@ -239,4 +246,5 @@
 	zstr      key;
 	zend_uint key_size;
+	ulong     h;
 	zend_constant constant;
 } xc_constinfo_t;
@@ -250,4 +258,5 @@
 	zstr      key;
 	zend_uint key_size;
+	ulong     h;
 	zend_function func;
 } xc_funcinfo_t;
@@ -261,4 +270,5 @@
 	zstr       key;
 	zend_uint  key_len;
+	ulong      h;
 } xc_autoglobal_t;
 /* }}} */
