diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog
index fa0e059e089cf1b8d161a5837a710d89a3ef5508..b623679ca613c0476df80563d0167d551bd7c27c 100644
--- a/libobjc/ChangeLog
+++ b/libobjc/ChangeLog
@@ -1,3 +1,12 @@
+2008-06-10  Kai Tietz  <kai.tietz@onevision.com>
+
+	* Object.m (compare): Add type id.
+	* objc/Object.h: Likewise.
+	* archive.c (objc_read_class): Use size_t to extend version to be
+	size of pointer scalar width.
+	* sendmsg.c (rtx): Undefine it before redefinition.
+	(__objc_print_dtable_stats): Cast arguments to long as intended.
+
 2008-05-30  Julian Brown  <julian@codesourcery.com>
 
 	* exception.c (__objc_exception_class): Initialise as constant
diff --git a/libobjc/Object.m b/libobjc/Object.m
index 3d7d2084b32c51c47d89bcda8eb29c189482bdea..1830acf4502a05d87edff1b16b743debfa9fcf81 100644
--- a/libobjc/Object.m
+++ b/libobjc/Object.m
@@ -115,7 +115,7 @@ extern int errno;
   return self==anObject;
 }
 
-- (int)compare:anotherObject;
+- (int)compare:(id)anotherObject;
 {
   if ([self isEqual:anotherObject])
     return 0;
diff --git a/libobjc/archive.c b/libobjc/archive.c
index 992a69600d4a3295cddd0438cbf4f1a298c9b006..b3af32d248a90d154874044b21860013212025a2 100644
--- a/libobjc/archive.c
+++ b/libobjc/archive.c
@@ -908,7 +908,7 @@ objc_read_class (struct objc_typed_stream *stream, Class *class)
 
 	  objc_read_unsigned_long (stream, &version);
 	  objc_hash_add (&stream->class_table,
-			 (*class)->name, (void *)version);
+			 (*class)->name, (void *) ((size_t) version));
 	}
 
       else if ((buf[0]&_B_CODE) == _B_UCOMM)
diff --git a/libobjc/objc/Object.h b/libobjc/objc/Object.h
index 7b67f46615c62d9a4cee5800af278965461a9e56..04d953d56b42a0ac0a44d4194d0c6cb120d1e53f 100644
--- a/libobjc/objc/Object.h
+++ b/libobjc/objc/Object.h
@@ -66,7 +66,7 @@ extern "C" {
 - self;
 - (unsigned int)hash;
 - (BOOL)isEqual:anObject;
-- (int)compare:anotherObject;
+- (int)compare:(id)anotherObject;
 
         /* Testing object type */
 - (BOOL)isMetaClass;
diff --git a/libobjc/sendmsg.c b/libobjc/sendmsg.c
index a0b66baf6a2e3e923c0fb93c30c30ef98caf7404..b132a153ff32ef1630612477d8553d4687d07efe 100644
--- a/libobjc/sendmsg.c
+++ b/libobjc/sendmsg.c
@@ -41,6 +41,8 @@ Boston, MA 02110-1301, USA.  */
 #define gen_rtx(args...) 1
 #define gen_rtx_MEM(args...) 1
 #define gen_rtx_REG(args...) 1
+/* Alread defined in gcc/coretypes.h. So prevent double definition warning.  */
+#undef rtx
 #define rtx int
 
 #if ! defined (STRUCT_VALUE) || STRUCT_VALUE == 0
@@ -685,14 +687,14 @@ __objc_print_dtable_stats ()
 #endif
 
   printf ("arrays: %d = %ld bytes\n", narrays, 
-	  (long) narrays * sizeof (struct sarray));
+	  (long) (narrays * sizeof (struct sarray)));
   total += narrays * sizeof (struct sarray);
   printf ("buckets: %d = %ld bytes\n", nbuckets, 
-	  (long) nbuckets * sizeof (struct sbucket));
+	  (long) (nbuckets * sizeof (struct sbucket)));
   total += nbuckets * sizeof (struct sbucket);
 
   printf ("idxtables: %d = %ld bytes\n",
-	  idxsize, (long) idxsize * sizeof (void *));
+	  idxsize, (long) (idxsize * sizeof (void *)));
   total += idxsize * sizeof (void *);
   printf ("-----------------------------------\n");
   printf ("total: %d bytes\n", total);