Adjust internal header dependencies
diff --git a/src/hb-array.hh b/src/hb-array.hh
index 3cce512..a07560f 100644
--- a/src/hb-array.hh
+++ b/src/hb-array.hh
@@ -28,13 +28,16 @@
 #define HB_ARRAY_HH
 
 #include "hb.hh"
+#include "hb-dsalgs.hh"
+#include "hb-iter.hh"
+#include "hb-null.hh"
 
 
 template <typename Type>
 struct hb_sorted_array_t;
 
 template <typename Type>
-struct hb_array_t
+struct hb_array_t// : hb_iter_t<hb_array_t<Type>, Type>
 {
   typedef Type item_t;
   enum { item_size = hb_static_size (Type) };
diff --git a/src/hb-dsalgs.hh b/src/hb-dsalgs.hh
index 48ce989..aa1c521 100644
--- a/src/hb-dsalgs.hh
+++ b/src/hb-dsalgs.hh
@@ -28,7 +28,6 @@
 #define HB_DSALGS_HH
 
 #include "hb.hh"
-
 #include "hb-null.hh"
 
 
diff --git a/src/hb-iter.hh b/src/hb-iter.hh
index 8767936..ffb6c49 100644
--- a/src/hb-iter.hh
+++ b/src/hb-iter.hh
@@ -28,6 +28,7 @@
 #define HB_ITER_HH
 
 #include "hb.hh"
+#include "hb-null.hh"
 
 
 /* Unified iterator object.
diff --git a/src/hb-vector.hh b/src/hb-vector.hh
index 4e962d2..a9fa123 100644
--- a/src/hb-vector.hh
+++ b/src/hb-vector.hh
@@ -29,6 +29,7 @@
 
 #include "hb.hh"
 #include "hb-array.hh"
+#include "hb-null.hh"
 
 
 template <typename Type, unsigned int PreallocedCount=8>
diff --git a/src/hb.hh b/src/hb.hh
index dbfcc20..18f4e5c 100644
--- a/src/hb.hh
+++ b/src/hb.hh
@@ -545,14 +545,17 @@
 #define hb_remove_pointer(T) hb_remove_pointer<T>::value
 
 
-/* Headers we include for everyone.  Keep sorted.  They express dependency amongst
- * themselves, but no other file should include them.*/
+/* Headers we include for everyone.  Keep topologically sorted by dependency.
+ * They express dependency amongst themselves, but no other file should include
+ * them directly.*/
 #include "hb-atomic.hh"
-#include "hb-debug.hh"
-#include "hb-dsalgs.hh"
-#include "hb-iter.hh"
 #include "hb-mutex.hh"
 #include "hb-null.hh"
-#include "hb-object.hh"
+#include "hb-dsalgs.hh"	// Requires: hb-null
+#include "hb-iter.hh"	// Requires: hb-null
+#include "hb-debug.hh"	// Requires: hb-atomic hb-dsalgs
+#include "hb-array.hh"	// Requires: hb-dsalgs hb-iter hb-null
+#include "hb-vector.hh"	// Requires: hb-array hb-null
+#include "hb-object.hh"	// Requires: hb-atomic hb-mutex hb-vector
 
 #endif /* HB_HH */
diff --git a/src/test-iter.cc b/src/test-iter.cc
index 4daa971..5cd0cc6 100644
--- a/src/test-iter.cc
+++ b/src/test-iter.cc
@@ -24,6 +24,7 @@
  * Google Author(s): Behdad Esfahbod
  */
 
+#include "hb.hh"
 #include "hb-iter.hh"
 
 #include "hb-array.hh"
diff --git a/src/test-unicode-ranges.cc b/src/test-unicode-ranges.cc
index d5d39b9..0eef8c2 100644
--- a/src/test-unicode-ranges.cc
+++ b/src/test-unicode-ranges.cc
@@ -24,6 +24,7 @@
  * Google Author(s): Garret Rieger
  */
 
+#include "hb.hh"
 #include "hb-ot-os2-unicode-ranges.hh"
 
 static void