diff --git a/mrdna/model/arbdmodel.py b/mrdna/model/arbdmodel.py
index a0b7608cd0199c0f91818f24327111d6b0dd3224..e2a1f90e477eff0b6b5d613bea18ee2974c8029e 100644
--- a/mrdna/model/arbdmodel.py
+++ b/mrdna/model/arbdmodel.py
@@ -327,6 +327,7 @@ class ParticleType():
     def __hash_key(self):
         l = [self.name,self.charge]
         for keyval in sorted(self.__dict__.items()):
+            if isinstance(keyval[1], list): keyval = (keyval[0],tuple(keyval[1]))
             l.extend(keyval)
         return tuple(l)
 
diff --git a/mrdna/segmentmodel.py b/mrdna/segmentmodel.py
index 99c6cf999c1efed9b6eb9a10b95de3fd436448bf..5212f95321811e5a843f7ee51fc265b2924cb019 100644
--- a/mrdna/segmentmodel.py
+++ b/mrdna/segmentmodel.py
@@ -1541,10 +1541,13 @@ class SegmentModel(ArbdModel):
                            decompPeriod, pairlistDistance=None,
                            nonbondedResolution=0)
 
+
         # self.max_basepairs_per_bead = max_basepairs_per_bead     # dsDNA
         # self.max_nucleotides_per_bead = max_nucleotides_per_bead # ssDNA
         self.children = self.segments = segments
 
+        self._generate_bead_callbacks = []
+
         self._bonded_potential = dict() # cache for bonded potentials
         self._generate_strands()
         self.grid_potentials = []
@@ -2543,6 +2546,10 @@ class SegmentModel(ArbdModel):
                     pot = self.get_dihedral_potential(k,t0)
                     self.add_dihedral( n1,n2,n3,n4, pot )
 
+        for callback in self._generate_bead_callbacks:
+            callback(self)
+
+
         # ## remove duplicate potentials; ## TODO ensure that they aren't added twice in the first place? 
         # self.remove_duplicate_terms()