Index: kernel/include/IMP/internal/AttributeTable.h
===================================================================
--- kernel/include/IMP/internal/AttributeTable.h	(revision 577)
+++ kernel/include/IMP/internal/AttributeTable.h	(working copy)
@@ -85,17 +85,7 @@
   }
 };
 
-struct ParticleAttributeTableTraits
-{
-  typedef internal::ObjectPointer<Particle,true> Value;
-  typedef KeyBase<Particle*> Key;
-  static Value get_invalid() {
-    return Value();
-  }
-  static bool get_is_valid(Value f) {
-    return f!= Value();
-  }
-};
+// The traits for the particle class are declared in the Particle.h
 
 /** \internal 
     If memory becomes a problem then either use a char table to look up
Index: kernel/include/IMP/Particle.h
===================================================================
--- kernel/include/IMP/Particle.h	(revision 577)
+++ kernel/include/IMP/Particle.h	(working copy)
@@ -52,6 +52,22 @@
 {
   friend class Model;
 
+  /* This has to be declared here since boost 1.35 wants the full
+     definition of Particle to be available when the ObjectPointer
+     is declared.
+  */
+  struct ParticleAttributeTableTraits
+  {
+    typedef internal::ObjectPointer<Particle, true> Value;
+    typedef KeyBase<Particle*> Key;
+    static Value get_invalid() {
+      return Value();
+    }
+    static bool get_is_valid(Value f) {
+      return f!= Value();
+    }
+  };
+
  typedef internal::AttributeTable<internal::FloatAttributeTableTraits> 
    FloatTable;
  typedef internal::AttributeTable<internal::FloatAttributeTableTraits> 
@@ -62,7 +78,7 @@
    IntTable;
   typedef internal::AttributeTable<internal::StringAttributeTableTraits>
     StringTable;
-  typedef internal::AttributeTable<internal::ParticleAttributeTableTraits>
+  typedef internal::AttributeTable<ParticleAttributeTableTraits>
     ParticleTable;
 
 public: