diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog
index 431c7fc200982ef021ccb44e64b40004b1d892b9..784056bf1e5b0bb60124660a4dfba2fc730473e2 100644
--- a/libobjc/ChangeLog
+++ b/libobjc/ChangeLog
@@ -1,3 +1,21 @@
+2010-09-11  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+	* objc/runtime.h: Moved to objc-private/runtime.h.  Do not include
+	all the objc/*.h files.
+	* objc-private/runtime.h: New file.
+	* archive.c: Include objc-private/runtime.h (and required objc/*.h
+	files) instead of objc/runtime.h.
+	* class.c: Same change.
+	* hash.c: Same change.
+	* init.c: Same change.
+	* misc.c: Same change.
+	* nil_method.c: Same change.
+	* objects.c: Same change.
+	* sarray.c: Same change.
+	* selector.c: Same change.
+	* sendmsg.c: Same change.
+	* thr.c: Same change.
+	
 2010-09-11  Nicola Pero  <nicola.pero@meta-innovation.com>
 
 	* objc/deprecated/struct_objc_selector.h: New file.  Definition of
diff --git a/libobjc/archive.c b/libobjc/archive.c
index 6ac25fbd9a13334f35fee18c1745272d9ffd320f..5275c63042b4b9c27de6d306819eb658d758dc73 100644
--- a/libobjc/archive.c
+++ b/libobjc/archive.c
@@ -23,7 +23,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
 #include "tconfig.h"
-#include "objc/runtime.h"
+#include "objc/objc.h"
+#include "objc/objc-api.h"
+#include "objc/thr.h"
+#include "objc/hash.h"
+#include "objc/objc-list.h" 
+#include "objc-private/runtime.h"
 #include "objc/typedstream.h"
 #include "objc/encoding.h"
 #include <stdlib.h>
diff --git a/libobjc/class.c b/libobjc/class.c
index 58f23194a2ea5b6bd6751f5b0d4e9d7013fc862e..f3bb07b1980f8e305e155b4a2575887b0de185b6 100644
--- a/libobjc/class.c
+++ b/libobjc/class.c
@@ -87,12 +87,13 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
   classes from the table - and the difficult thing with lock-free data
   structures is freeing data when is removed from the structures.  */
 
-#include "objc/runtime.h"            /* the kitchen sink */
-#include "objc/sarray.h"
-
 #include "objc/objc.h"
 #include "objc/objc-api.h"
 #include "objc/thr.h"
+#include "objc/hash.h"
+#include "objc/objc-list.h" 
+#include "objc-private/runtime.h"            /* the kitchen sink */
+#include "objc/sarray.h"
 
 /* We use a table which maps a class name to the corresponding class
  * pointer.  The first part of this file defines this table, and
diff --git a/libobjc/hash.c b/libobjc/hash.c
index 21d9458c8352f742ee0b11bcf7ca59e677643010..69b0b9f216271e67743813fd779aa94c4fcf213a 100644
--- a/libobjc/hash.c
+++ b/libobjc/hash.c
@@ -24,9 +24,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 #include "assert.h"
 
+#include "objc/objc.h"
+#include "objc/objc-api.h"
+#include "objc/thr.h"
 #include "objc/hash.h"
-
-#include "objc/runtime.h"		/* for DEBUG_PRINTF */
+#include "objc/objc-list.h" 
+#include "objc-private/runtime.h"		/* for DEBUG_PRINTF */
 
 /* These two macros determine when a hash table is full and
    by how much it should be expanded respectively.
diff --git a/libobjc/init.c b/libobjc/init.c
index 138f9077472dbfd1ed3476248f2d3a3ccbea1779..ea6ab38569ea6a9f36dc7b21903595a1df9a9100 100644
--- a/libobjc/init.c
+++ b/libobjc/init.c
@@ -24,7 +24,12 @@ a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
-#include "objc/runtime.h"
+#include "objc/objc.h"
+#include "objc/objc-api.h"
+#include "objc/thr.h"
+#include "objc/hash.h"
+#include "objc/objc-list.h" 
+#include "objc-private/runtime.h"
 
 /* The version number of this runtime.  This must match the number 
    defined in gcc (objc-act.c).  */
diff --git a/libobjc/misc.c b/libobjc/misc.c
index ab7f568ebc00dc57d7df43a5d5877f1e04d6c599..987acfc2e204fd11737f62006604a3c196e268d5 100644
--- a/libobjc/misc.c
+++ b/libobjc/misc.c
@@ -27,7 +27,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 #define __USE_FIXED_PROTOTYPES__
 #include <stdlib.h>
-#include "objc/runtime.h"
+#include "objc/objc.h"
+#include "objc/objc-api.h"
+#include "objc/thr.h"
+#include "objc/hash.h"
+#include "objc/objc-list.h" 
+#include "objc-private/runtime.h"
 
 /*
 ** Error handler function
diff --git a/libobjc/nil_method.c b/libobjc/nil_method.c
index f73505cab5511168c2ed3101b009c7e7b3fd3648..c58515baa5b7141a271cad92f521c28c965a085b 100644
--- a/libobjc/nil_method.c
+++ b/libobjc/nil_method.c
@@ -26,7 +26,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 /* This is the nil method, the function that is called when the receiver
    of a method is nil */
 
-#include "objc/runtime.h"
+#include "objc/objc.h"
+#include "objc/objc-api.h"
+#include "objc/thr.h"
+#include "objc/hash.h"
+#include "objc/objc-list.h" 
+#include "objc-private/runtime.h"
 
 /* When the receiver of a method invocation is nil, the runtime
    returns nil_method() as the method implementation.  This function
diff --git a/libobjc/objc/runtime.h b/libobjc/objc-private/runtime.h
similarity index 92%
rename from libobjc/objc/runtime.h
rename to libobjc/objc-private/runtime.h
index 190d7efb649c5352b691e3259fed03a6c75c6bcd..c924e4d49750b0f05e5c20160a9211752b1f4718 100644
--- a/libobjc/objc/runtime.h
+++ b/libobjc/objc-private/runtime.h
@@ -22,6 +22,19 @@ a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+/* You need to include this file after including a number of standard ObjC files.
+
+The original list was:
+
+#include "objc/objc.h"
+#include "objc/objc-api.h"
+#include "objc/thr.h"
+#include "objc/hash.h"
+#include "objc/objc-list.h"
+
+but can almost certainly be shrinked down.
+
+*/
 
 #ifndef __objc_runtime_INCLUDE_GNU
 #define __objc_runtime_INCLUDE_GNU
@@ -34,14 +47,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #include <stddef.h>		/* so noone else will get system versions */
 #include <assert.h>
 
-#include "objc.h"		/* core data types */
-#include "objc-api.h"		/* runtime api functions */
-
-#include "thr.h"		/* thread and mutex support */
-
-#include "hash.h"		/* hash structures */
-#include "objc-list.h"		/* linear lists */
-
 #ifdef __cplusplus
 extern "C" {
 #endif /* __cplusplus */
diff --git a/libobjc/objects.c b/libobjc/objects.c
index 36ff8675a2f10e90b70303c75bea7ab369415e9c..10ac3a991022b6b87e0cdbf373a308137d1a6b7c 100644
--- a/libobjc/objects.c
+++ b/libobjc/objects.c
@@ -25,7 +25,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 #include "tconfig.h"         /* include defs of bzero for target */
 #include "objc/objc.h"
-#include "objc/runtime.h"		/* the kitchen sink */
+#include "objc/objc-api.h"
+#include "objc/thr.h"
+#include "objc/hash.h"
+#include "objc/objc-list.h" 
+#include "objc-private/runtime.h"		/* the kitchen sink */
 
 #if OBJC_WITH_GC
 # include <gc.h>
diff --git a/libobjc/sarray.c b/libobjc/sarray.c
index bb80ae03ec363b703ffb8839f2c45c3e8ecced0d..c4d7fbb6b364406a13879c23be8a894c09fceff1 100644
--- a/libobjc/sarray.c
+++ b/libobjc/sarray.c
@@ -24,7 +24,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 
 #include "objc/sarray.h"
-#include "objc/runtime.h"
+#include "objc/objc.h"
+#include "objc/objc-api.h"
+#include "objc/thr.h"
+#include "objc/hash.h"
+#include "objc/objc-list.h" 
+#include "objc-private/runtime.h"
 #include <stdio.h>
 #include "assert.h"
 
diff --git a/libobjc/selector.c b/libobjc/selector.c
index 226ef7db3103a374c09cb807c2d78c5f63b95de7..1b611419da7fe0533cd3ff1139c445081acf1f5a 100644
--- a/libobjc/selector.c
+++ b/libobjc/selector.c
@@ -23,7 +23,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
 
-#include "objc/runtime.h"
+#include "objc/objc.h"
+#include "objc/objc-api.h"
+#include "objc/thr.h"
+#include "objc/hash.h"
+#include "objc/objc-list.h" 
+#include "objc-private/runtime.h"
 #include "objc/sarray.h"
 #include "objc/encoding.h"
 
diff --git a/libobjc/sendmsg.c b/libobjc/sendmsg.c
index 8b1845104e50e18727d1f000ca65f378d63a83d8..5b0d3604a7bf7f93b0a87f67648167f95d53f0f2 100644
--- a/libobjc/sendmsg.c
+++ b/libobjc/sendmsg.c
@@ -31,7 +31,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #include "tconfig.h"
 #include "coretypes.h"
 #include "tm.h"
-#include "objc/runtime.h"
+#include "objc/objc.h"
+#include "objc/objc-api.h"
+#include "objc/thr.h"
+#include "objc/hash.h"
+#include "objc/objc-list.h"
+#include "objc-private/runtime.h"
 #include "objc/sarray.h"
 #include "objc/encoding.h"
 #include "runtime-info.h"
diff --git a/libobjc/thr.c b/libobjc/thr.c
index 4bdbb5d1a2760380523af9154368e2a8658c0bff..b2a896a0f4541f0c92a4a2b6e77456c074d25249 100644
--- a/libobjc/thr.c
+++ b/libobjc/thr.c
@@ -36,7 +36,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #include "tm.h"
 #include "defaults.h"
 #include "objc/thr.h"
-#include "objc/runtime.h"
+#include "objc/objc.h"
+#include "objc/objc-api.h"
+#include "objc/hash.h"
+#include "objc/objc-list.h" 
+#include "objc-private/runtime.h"
 #include <gthr.h>
 
 #include <stdlib.h>