diff --git a/contrib/btree_gist/btree_gist.c b/contrib/btree_gist/btree_gist.c
index 924062ed034fe9609249d0c0c155ccd46ed2c80d..c4eb8522130f4c290d1a5930ad3ba7f2e749dcf4 100644
--- a/contrib/btree_gist/btree_gist.c
+++ b/contrib/btree_gist/btree_gist.c
@@ -86,6 +86,8 @@ Datum		gts_same(PG_FUNCTION_ARGS);
 static void gts_binary_union(Datum *r1, char *r2);
 static int	tskey_cmp(const void *a, const void *b);
 
+#define TimestampGetDatumFast(X) Float8GetDatumFast(X)
+
 /* define for comparison */
 #define TSGE( ts1, ts2 ) (DatumGetBool(DirectFunctionCall2( \
 		timestamp_ge, \
@@ -297,23 +299,11 @@ gts_compress(PG_FUNCTION_ARGS)
 	if (entry->leafkey)
 	{
 		TSKEY	   *r = (TSKEY *) palloc(sizeof(TSKEY));
-
 		retval = palloc(sizeof(GISTENTRY));
-		if (entry->key)
-		{
-			r->lower = r->upper = *(Timestamp *) (entry->key);
-
-			gistentryinit(*retval, PointerGetDatum(r),
-						  entry->rel, entry->page,
-						  entry->offset, sizeof(TSKEY), FALSE);
-
-		}
-		else
-		{
-			gistentryinit(*retval, PointerGetDatum(NULL),
-						  entry->rel, entry->page,
-						  entry->offset, 0, FALSE);
-		}
+		r->lower = r->upper = *(Timestamp *) (entry->key);
+		gistentryinit(*retval, PointerGetDatum(r),
+			  entry->rel, entry->page,
+			  entry->offset, sizeof(TSKEY), FALSE);
 	}
 	else
 		retval = entry;
@@ -408,8 +398,8 @@ gts_penalty(PG_FUNCTION_ARGS)
 
 	intr = DatumGetIntervalP(DirectFunctionCall2(
 												 timestamp_mi,
-									  TimestampGetDatum(newentry->upper),
-								   TimestampGetDatum(origentry->upper)));
+									  TimestampGetDatumFast(newentry->upper),
+								   TimestampGetDatumFast(origentry->upper)));
 
 	/* see interval_larger */
 	*result = Max(intr->time + intr->month * (30.0 * 86400), 0);
@@ -417,8 +407,8 @@ gts_penalty(PG_FUNCTION_ARGS)
 
 	intr = DatumGetIntervalP(DirectFunctionCall2(
 												 timestamp_mi,
-									 TimestampGetDatum(origentry->lower),
-									TimestampGetDatum(newentry->lower)));
+									 TimestampGetDatumFast(origentry->lower),
+									TimestampGetDatumFast(newentry->lower)));
 
 	/* see interval_larger */
 	*result += Max(intr->time + intr->month * (30.0 * 86400), 0);
@@ -483,8 +473,8 @@ tskey_cmp(const void *a, const void *b)
 	return DatumGetInt32(
 						 DirectFunctionCall2(
 											 timestamp_cmp,
-				  TimestampGetDatum(((TSKEY *) (((RIX *) a)->r))->lower),
-				   TimestampGetDatum(((TSKEY *) (((RIX *) b)->r))->lower)
+				  TimestampGetDatumFast(((TSKEY *) (((RIX *) a)->r))->lower),
+				   TimestampGetDatumFast(((TSKEY *) (((RIX *) b)->r))->lower)
 											 )
 		);
 }