diff --git a/contrib/intarray/_int.h b/contrib/intarray/_int.h
index 96f2b116a9f6b3cca80d0b2f5a36203283b848c3..702dfaade538cbd9578a3f27134f74f33a14e094 100644
--- a/contrib/intarray/_int.h
+++ b/contrib/intarray/_int.h
@@ -17,13 +17,6 @@
 /* dimension of array */
 #define NDIM 1
 
-/*
- * flags for gist__int_ops, use ArrayType->flags
- * which is unused (see array.h)
- */
-#define LEAFKEY		(1<<31)
-#define ISLEAFKEY(x)	( ((ArrayType*)(x))->flags & LEAFKEY )
-
 /* useful macros for accessing int4 arrays */
 #define ARRPTR(x)  ( (int4 *) ARR_DATA_PTR(x) )
 #define ARRNELEMS(x)  ArrayGetNItems( ARR_NDIM(x), ARR_DIMS(x))
@@ -52,10 +45,9 @@
 
 
 /* bigint defines */
-#define BITBYTE 8
 #define SIGLENINT  63			/* >122 => key will toast, so very slow!!! */
 #define SIGLEN	( sizeof(int)*SIGLENINT )
-#define SIGLENBIT (SIGLEN*BITBYTE)
+#define SIGLENBIT (SIGLEN*BITS_PER_BYTE)
 
 typedef char BITVEC[SIGLEN];
 typedef char *BITVECP;
@@ -74,11 +66,11 @@ typedef char *BITVECP;
 		}
 
 /* beware of multiple evaluation of arguments to these macros! */
-#define GETBYTE(x,i) ( *( (BITVECP)(x) + (int)( (i) / BITBYTE ) ) )
+#define GETBYTE(x,i) ( *( (BITVECP)(x) + (int)( (i) / BITS_PER_BYTE ) ) )
 #define GETBITBYTE(x,i) ( (*((char*)(x)) >> (i)) & 0x01 )
-#define CLRBIT(x,i)   GETBYTE(x,i) &= ~( 0x01 << ( (i) % BITBYTE ) )
-#define SETBIT(x,i)   GETBYTE(x,i) |=  ( 0x01 << ( (i) % BITBYTE ) )
-#define GETBIT(x,i) ( (GETBYTE(x,i) >> ( (i) % BITBYTE )) & 0x01 )
+#define CLRBIT(x,i)   GETBYTE(x,i) &= ~( 0x01 << ( (i) % BITS_PER_BYTE ) )
+#define SETBIT(x,i)   GETBYTE(x,i) |=  ( 0x01 << ( (i) % BITS_PER_BYTE ) )
+#define GETBIT(x,i) ( (GETBYTE(x,i) >> ( (i) % BITS_PER_BYTE )) & 0x01 )
 #define HASHVAL(val) (((unsigned int)(val)) % SIGLENBIT)
 #define HASH(sign, val) SETBIT((sign), HASHVAL(val))
 
diff --git a/contrib/intarray/_int_gist.c b/contrib/intarray/_int_gist.c
index 4f777bc40b8c24563da18051946bdf11525caaae..c5f8818aa3d3eaf4574e7f49fde865e66ba521c3 100644
--- a/contrib/intarray/_int_gist.c
+++ b/contrib/intarray/_int_gist.c
@@ -39,7 +39,7 @@ g_int_consistent(PG_FUNCTION_ARGS)
 	if (strategy == BooleanSearchStrategy)
 		PG_RETURN_BOOL(execconsistent((QUERYTYPE *) query,
 								   (ArrayType *) DatumGetPointer(entry->key),
-					  ISLEAFKEY((ArrayType *) DatumGetPointer(entry->key))));
+					  GIST_LEAF(entry)));
 
 	/* XXX are we sure it's safe to scribble on the query object here? */
 	/* XXX what about toasted input? */
@@ -131,7 +131,11 @@ g_int_compress(PG_FUNCTION_ARGS)
 	{
 		r = (ArrayType *) PG_DETOAST_DATUM_COPY(entry->key);
 		PREPAREARR(r);
-		r->flags |= LEAFKEY;
+
+		if (ARRNELEMS(r)>= 2 * MAXNUMRANGE)
+			elog(NOTICE,"Input array is too big (%d maximum allowed, %d current), use gist__intbig_ops opclass instead",
+				2 * MAXNUMRANGE - 1, ARRNELEMS(r)); 
+			
 		retval = palloc(sizeof(GISTENTRY));
 		gistentryinit(*retval, PointerGetDatum(r),
 				  entry->rel, entry->page, entry->offset, VARSIZE(r), FALSE);
@@ -139,8 +143,11 @@ g_int_compress(PG_FUNCTION_ARGS)
 		PG_RETURN_POINTER(retval);
 	}
 
+	/* leaf entries never compress one more time, only when entry->leafkey ==true,
+           so now we work only with internal keys  */
+
 	r = (ArrayType *) PG_DETOAST_DATUM(entry->key);
-	if (ISLEAFKEY(r) || ARRISVOID(r))
+	if (ARRISVOID(r)) 
 	{
 		if (r != (ArrayType *) DatumGetPointer(entry->key))
 			pfree(r);
@@ -205,7 +212,7 @@ g_int_decompress(PG_FUNCTION_ARGS)
 
 	lenin = ARRNELEMS(in);
 
-	if (lenin < 2 * MAXNUMRANGE || ISLEAFKEY(in))
+	if (lenin < 2 * MAXNUMRANGE)
 	{							/* not compressed value */
 		if (in != (ArrayType *) DatumGetPointer(entry->key))
 		{
@@ -498,8 +505,6 @@ g_int_picksplit(PG_FUNCTION_ARGS)
 	pfree(costvector);
 	*right = *left = FirstOffsetNumber;
 
-	datum_l->flags &= ~LEAFKEY;
-	datum_r->flags &= ~LEAFKEY;
 	v->spl_ldatum = PointerGetDatum(datum_l);
 	v->spl_rdatum = PointerGetDatum(datum_r);
 
diff --git a/contrib/intarray/_int_tool.c b/contrib/intarray/_int_tool.c
index 216a4105c7f6bfc855c0e3435d9c75455532812e..a3399874ada97fb36272c0d230575da38d303cf5 100644
--- a/contrib/intarray/_int_tool.c
+++ b/contrib/intarray/_int_tool.c
@@ -215,7 +215,6 @@ new_intArrayType(int num)
 	ARR_SIZE(r) = nbytes;
 	ARR_NDIM(r) = NDIM;
 	ARR_ELEMTYPE(r) = INT4OID;
-	r->flags &= ~LEAFKEY;
 	*((int *) ARR_DIMS(r)) = num;
 	*((int *) ARR_LBOUND(r)) = 1;