diff -ur uniqueidentifier-0.2/uniqueidentifier.c uniqueidentifier/uniqueidentifier.c
--- uniqueidentifier-0.2/uniqueidentifier.c	2003-12-01 22:22:35.000000000 +0200
+++ uniqueidentifier/uniqueidentifier.c	2007-02-06 12:22:49.000000000 +0200
@@ -23,6 +23,9 @@
 #include "fmgr.h"
 #include "access/hash.h"
 
+#ifdef PG_MODULE_MAGIC
+PG_MODULE_MAGIC;
+#endif
 
 /*
  *	Here is the internal storage format for uniqueidentifiers.
@@ -97,9 +100,6 @@
 	char *result;
 	uniqueidentifier *in = (uniqueidentifier *) PG_GETARG_POINTER(0);
 
-	if (in == NULL)
-		PG_RETURN_CSTRING (NULL);
-
 	result = (char *) palloc(37);
 
 	result[0] = '\0';
@@ -206,13 +206,6 @@
 	uniqueidentifier *u1 = (uniqueidentifier *) PG_GETARG_POINTER(0);
 	uniqueidentifier *u2 = (uniqueidentifier *) PG_GETARG_POINTER(1);
 	
-	if ((u1 == NULL) || (u2 == NULL)) {
-	    if ((u1 == NULL) && (u2 == NULL)) 
-		PG_RETURN_BOOL (true);
-	    else
-		PG_RETURN_BOOL (false);
-	}		
-	    
 	if (memcmp(u1->uid, u2->uid, 16) == 0)
 	    PG_RETURN_BOOL (true);
 	else
@@ -243,12 +236,7 @@
 {
 	uniqueidentifier *u1 = (uniqueidentifier *) PG_GETARG_POINTER(0);
 	uniqueidentifier *u2 = (uniqueidentifier *) PG_GETARG_POINTER(1);
-	if ((u1 == NULL) || (u2 == NULL)) {
-	    if ((u1 == NULL) && (u2 == NULL)) 
-		PG_RETURN_BOOL (false);
-	    else
-		PG_RETURN_BOOL (true);
-	}		
+
 	if (memcmp(u1->uid, u2->uid, 16) == 0)
 	    PG_RETURN_BOOL (false);
 	else
@@ -319,15 +307,6 @@
 	uint16 time_hi_and_version2;
 	uint16 clock_seq2;
 	
-	if ((u1 == NULL) || (u2 == NULL)) {
-	    if ((u1 == NULL) && (u2 == NULL)) 
-		return 0;
-	    if (u1 == NULL)
-		return 1;
-	    else
-		return -1;	
-	}		
-
 	if(memcmp(u1->uid, u2->uid, 16) == 0)
 	    return 0;
 
diff -ur uniqueidentifier-0.2/uniqueidentifier.sql.in uniqueidentifier/uniqueidentifier.sql.in
--- uniqueidentifier-0.2/uniqueidentifier.sql.in	2003-12-02 14:45:20.000000000 +0200
+++ uniqueidentifier/uniqueidentifier.sql.in	2007-02-06 12:24:42.000000000 +0200
@@ -12,11 +12,13 @@
 
 CREATE OR REPLACE FUNCTION uniqueidentifier_in(cstring)
 	returns uniqueidentifier
+	strict immutable
 	as 'MODULE_PATHNAME'
 	language 'c';
 
 CREATE OR REPLACE FUNCTION uniqueidentifier_out(uniqueidentifier)
 	returns cstring
+	strict immutable
 	as 'MODULE_PATHNAME'
 	language 'c';
 
@@ -34,31 +36,37 @@
 CREATE OR REPLACE FUNCTION uniqueidentifier_lt(uniqueidentifier, uniqueidentifier)
 	returns bool
 	as 'MODULE_PATHNAME'
+	strict immutable
 	language 'c';
 
 CREATE OR REPLACE FUNCTION uniqueidentifier_le(uniqueidentifier, uniqueidentifier)
 	returns bool
 	as 'MODULE_PATHNAME'
+	strict immutable
 	language 'c';
 
 CREATE OR REPLACE FUNCTION uniqueidentifier_eq(uniqueidentifier, uniqueidentifier)
 	returns bool
 	as 'MODULE_PATHNAME'
+	strict immutable
 	language 'c';
 
 CREATE OR REPLACE FUNCTION uniqueidentifier_ge(uniqueidentifier, uniqueidentifier)
 	returns bool
 	as 'MODULE_PATHNAME'
+	strict immutable
 	language 'c';
 
 CREATE OR REPLACE FUNCTION uniqueidentifier_gt(uniqueidentifier, uniqueidentifier)
 	returns bool
 	as 'MODULE_PATHNAME'
+	strict immutable
 	language 'c';
 
 CREATE OR REPLACE FUNCTION uniqueidentifier_ne(uniqueidentifier, uniqueidentifier)
 	returns bool
 	as 'MODULE_PATHNAME'
+	strict immutable
 	language 'c';
 
 --
@@ -135,7 +143,7 @@
 
 CREATE OR REPLACE FUNCTION text(uniqueidentifier)
 	returns text
-	immutable
+	strict immutable
 	as 'MODULE_PATHNAME', 'uniqueidentifier_text'
 	language 'c';
 	
@@ -145,7 +153,7 @@
 
 CREATE OR REPLACE FUNCTION newid(text)
 	returns uniqueidentifier
-	immutable
+	strict immutable
 	as 'MODULE_PATHNAME', 'uniqueidentifier_from_text'
 	language 'c';
 	
@@ -171,6 +179,7 @@
 
 CREATE OR REPLACE FUNCTION uniqueidentifier_cmp(uniqueidentifier, uniqueidentifier)
 	RETURNS int4
+	strict immutable
 	AS 'MODULE_PATHNAME'
 	LANGUAGE 'C';
 
