diff --git a/cadnano_segments.py b/cadnano_segments.py
index 585b3681a04191024dd7f666027e67dbb9bfdfae..d0adeea2b822735fc997b5081a0e0a1e74fce940 100644
--- a/cadnano_segments.py
+++ b/cadnano_segments.py
@@ -544,6 +544,39 @@ def decode_cadnano_part(json_data):
 def package_archive( name, directory ):
     ...
 
+def read_model(json_data, sequence=None):
+    """ Read in data """
+    part = decode_cadnano_part(json_data)
+    model = cadnano_part(part,
+                         max_basepairs_per_bead = 7,
+                         max_nucleotides_per_bead = 4,
+                         local_twist=False)
+    model._generate_strands() # TODO: move into model creation
+
+    # TODO
+    # try:
+    #     model.set_cadnano_sequence()
+    # finally:
+    #     ...
+    #     if sequence is not None and len() :
+    #         model.strands[0].set_sequence(seq)
+
+    if sequence is None or len(sequence) == 0:
+        ## default m13mp18
+        sequence = list(m13seq)
+        try:
+            model.strands[0].set_sequence(sequence)
+        except:
+            ...
+    else:
+        model.strands[0].set_sequence(sequence)
+
+    for s in model.segments:
+        s.randomize_unset_sequence()
+
+    return model
+
+
 def run_simulation_protocol( output_name, job_id, json_data,
                              sequence=None,
                              remove_long_bonds=False,