diff --git a/arbdmodel/__init__.py b/arbdmodel/__init__.py
index 03ba1d2ef781b16fb27d53a7f2a2d6c37ce1b6b0..981b3ccc210034d48ac4b760eb9e9a01d0daf0d3 100644
--- a/arbdmodel/__init__.py
+++ b/arbdmodel/__init__.py
@@ -417,6 +417,10 @@ class PointParticle(Transformable, Child):
             segname = p.segname
         except:
             segname = "A"
+        try:
+            chain = p.chain
+        except:
+            chain = "A"
         try:
             resname = p.resname
         except:
@@ -438,7 +442,7 @@ class PointParticle(Transformable, Child):
         data = dict(segname = segname,
                     resname = resname,
                     name = str(p.name)[:4],
-                    chain = "A",
+                    chain = chain[0],
                     resid = int(resid),
                     idx = p.idx+1,
                     type = p.type_.name[:4],
diff --git a/arbdmodel/abstract_polymer.py b/arbdmodel/abstract_polymer.py
index 3a25e1169435359859ca455af7c7ade53a51439d..732a9562645669297d7b4ea6b1218fe302815faa 100644
--- a/arbdmodel/abstract_polymer.py
+++ b/arbdmodel/abstract_polymer.py
@@ -174,6 +174,9 @@ class PolymerSection(ConnectableElement):
         if 'segname' not in kwargs:
             self.segname = name
 
+        for key,val in kwargs.items():
+            self.__dict__[key] = val
+
         self.num_monomers = int(num_monomers)
         self.monomer_length = monomer_length
         
diff --git a/arbdmodel/hps_polymer_model.py b/arbdmodel/hps_polymer_model.py
index f0cd7237c88bb9703072dcc8d7020c269192679e..c8a63274937b74b0986e610cfbe5919d6ccb87c3 100644
--- a/arbdmodel/hps_polymer_model.py
+++ b/arbdmodel/hps_polymer_model.py
@@ -17,7 +17,7 @@ _types = dict(
                      mass = 71.08,
                      charge = 0,
                      sigma = 5.04,
-                     lambda_ = 0.730,
+                     lambda_ = 0.72973,
                  ),
     R = ParticleType("ARG",
                      mass = 156.2,
@@ -29,67 +29,67 @@ _types = dict(
                      mass = 114.1,
                      charge = 0,
                      sigma = 5.68,
-                     lambda_ = 0.432,
+                     lambda_ = 0.432432,
                  ),
     D = ParticleType("ASP",
                      mass = 115.1,
                      charge = -1,
                      sigma = 5.58,
-                     lambda_ = 0.378,
+                     lambda_ = 0.378378,
                  ),
     C = ParticleType("CYS",
                      mass = 103.1,
                      charge = 0,
                      sigma = 5.48,
-                     lambda_ = 0.595,
+                     lambda_ = 0.594595,
                  ),
     Q = ParticleType("GLN",
                      mass = 128.1,
                      charge = 0,
                      sigma = 6.02,
-                     lambda_ = 0.514,
+                     lambda_ = 0.513514,
                  ),
     E = ParticleType("GLU",
                      mass = 129.1,
                      charge = -1,
                      sigma = 5.92,
-                     lambda_ = 0.459,
+                     lambda_ = 0.459459,
                  ),
     G = ParticleType("GLY",
                      mass = 57.05,
                      charge = 0,
                      sigma = 4.5,
-                     lambda_ = 0.649,
+                     lambda_ = 0.648649,
                  ),
     H = ParticleType("HIS",
                      mass = 137.1,
                      charge = 0.5,
                      sigma = 6.08,
-                     lambda_ = 0.514,
+                     lambda_ = 0.513514,
                  ),
     I = ParticleType("ILE",
                      mass = 113.2,
                      charge = 0,
                      sigma = 6.18,
-                     lambda_ = 0.973,
+                     lambda_ = 0.972973,
                  ),
     L = ParticleType("LUE",
                      mass = 113.2,
                      charge = 0,
                      sigma = 6.18,
-                     lambda_ = 0.973,
+                     lambda_ = 0.972973,
                  ),
     K = ParticleType("LYS",
                      mass = 128.2,
                      charge = 1,
                      sigma = 6.36,
-                     lambda_ = 0.514,
+                     lambda_ = 0.513514,
                  ),
     M = ParticleType("MET",
                      mass = 131.2,
                      charge = 0,
                      sigma = 6.18,
-                     lambda_ = 0.838,
+                     lambda_ = 0.837838,
                  ),
     F = ParticleType("PHE",
                      mass = 147.2,
@@ -107,33 +107,35 @@ _types = dict(
                      mass = 87.08,
                      charge = 0,
                      sigma = 5.18,
-                     lambda_ = 0.595,
+                     lambda_ = 0.594595,
                  ),
     T = ParticleType("THR",
                      mass = 101.1,
                      charge = 0,
                      sigma = 5.62,
-                     lambda_ = 0.676,
+                     lambda_ = 0.675676,
                  ),
     W = ParticleType("TRP",
                      mass = 186.2,
                      charge = 0,
                      sigma = 6.78,
-                     lambda_ = 0.946,
+                     lambda_ = 0.945946,
                  ),
     Y = ParticleType("TYR",
                      mass = 163.2,
                      charge = 0,
                      sigma = 6.46,
-                     lambda_ = 0.865,
+                     lambda_ = 0.864865,
                  ),
     V = ParticleType("VAL",
                      mass = 99.07,
                      charge = 0,
                      sigma = 5.86,
-                     lambda_ = 0.892,
+                     lambda_ = 0.891892,
                  )
 )
+for k,t in _types.items():
+    t.resname = t.name
 
 class HpsNonbonded(NonbondedScheme):
     def __init__(self, debye_length=10, resolution=0.1, rMin=0):
@@ -193,6 +195,16 @@ class HpsBeadsFromPolymer(Group):
 
         self.polymer = polymer
         self.sequence = sequence
+
+        for prop in ('segname','chain'):
+            if prop not in kwargs:
+                # import pdb
+                # pdb.set_trace()
+                try:
+                    self.__dict__[prop] = polymer.__dict__[prop]
+                except:
+                    pass
+
         if len(sequence) != polymer.num_monomers:
             raise ValueError("Length of sequence does not match length of polymer")
         Group.__init__(self, **kwargs)
@@ -208,8 +220,13 @@ class HpsBeadsFromPolymer(Group):
             r = self.polymer.contour_to_position(c)
             s = self.sequence[i]
 
-            bead = PointParticle(_types[s], r )
+            bead = PointParticle(_types[s], r,
+                                 name = s,
+                                 resid = i+1)
             self.add(bead)
+            # import pdb
+            # pdb.set_trace()
+            # continue
 
         ## Two consecutive nts 
         for i in range(len(self.children)-1):
@@ -236,25 +253,23 @@ class HpsModel(ArbdModel):
         [debye_length]: angstroms
         [damping_coefficient]: ns
         """
-
         kwargs['timestep'] = 10e-6
         kwargs['cutoff'] = max(4*debye_length,20)
 
+        if 'decompPeriod' not in kwargs:
+            kwargs['decompPeriod'] = 1000
+
         """ Assign sequences """
         if sequences is None:
             raise NotImplementedError("HpsModel must be provided a sequences argument")
 
         self.polymer_group = AbstractPolymerGroup(polymers)
-        self.peptides = [HpsBeadsFromPolymer(p,s) 
-                         for p,s in zip(self.polymer_group.polymers,sequences)]
-
-        ArbdModel.__init__(self, self.peptides, **kwargs)
+        self.sequences = sequences
+        ArbdModel.__init__(self, [], **kwargs)
 
         """ Update type diffusion coefficients """
-        all_types = [t for key,t in _types.items()]
-        for t in all_types:
-            t.damping_coefficient = damping_coefficient
-            # t.diffusivity = 831447.2 * temperature / (t.mass * damping_coefficient)
+        self.types = all_types = [t for key,t in _types.items()]
+        self.set_damping_coefficient( damping_coefficient )
 
         """ Set up nonbonded interactions """
         nonbonded = HpsNonbonded(debye_length)
@@ -268,12 +283,28 @@ class HpsModel(ArbdModel):
         self.generate_beads()
 
     def update_splines(self, coords):
-        ...
-                
+        i = 0
+        for p in self.polymer_group.polymers:
+            n = p.num_monomers
+            p.set_splines(np.linspace(0,1,n), coords[i:i+n])
+            i += n
+
+        self.clear_all()
+        self.generate_beads()
+        ## TODO Apply restraints, etc
+
     def generate_beads(self):
+        self.peptides = [HpsBeadsFromPolymer(p,s)
+                         for p,s in zip(self.polymer_group.polymers,self.sequences)]
+
         for s in self.peptides:
+            self.add(s)
             s._generate_beads()
 
+    def set_damping_coefficient(self, damping_coefficient):
+        for t in self.types:
+            t.damping_coefficient = damping_coefficient
+            # t.diffusivity = 831447.2 * temperature / (t.mass * damping_coefficient)
 
 if __name__ == "__main__":