diff --git a/modelling/pymod/_mtm.py b/modelling/pymod/_mtm.py
index c374ff0e2e29b9cd278b1aaa339fe9e6a66c4cdc..6d287b609c6d3119324d50fae5ee3d91b9b61930 100644
--- a/modelling/pymod/_mtm.py
+++ b/modelling/pymod/_mtm.py
@@ -4,6 +4,7 @@ from ost import seq, geom, mol
 from promod3 import loop
 import _modelling as modelling
 from _pipeline import CloseGaps
+from promod3.loop import FraggerHandle
 
 def _CheckAlternativeRawmodels(seed_rawmodel, alternative_rawmodels):
 
@@ -364,13 +365,21 @@ def _NonOverlapLinkerSampler(seed_rawmodel, arm, seed_ch_idx, arm_ch_idx,
         full_bb_list.ReplaceFragment(arm_bb_list, arm_replace_idx, True)
 
     # do the sampling
-    fragger = loop.Fragger(linker_seq)
-    seqsim_matrix = seq.alg.BLOSUM62
-    fragger.AddSeqSimParameters(1.0, seqsim_matrix)
-    if structure_db == None:
-        structure_db = loop.LoadStructureDB()
-    num_fragments = 10000
-    fragger.Fill(structure_db, 0.0, num_fragments)
+    num_fragments = 1000
+    psipred_prediction = None
+    profile = None
+    if len(seed_rawmodel.profiles) > 0:
+        profile = seed_rawmodel.profiles[seed_ch_idx]
+    if len(seed_rawmodel.psipred_predictions) > 0:
+        psipred_prediction = seed_rawmodel.psipred_predictions[seed_ch_idx]
+    fragger_handle = FraggerHandle(seed_rawmodel.seqres[seed_ch_idx],
+                                   profile = profile,
+                                   psipred_pred = psipred_prediction,
+                                   fragment_length = len(linker_seq),
+                                   fragments_per_position = num_fragments,
+                                   structure_db = structure_db)
+
+    fragger = fragger_handle.Get(linker_range[0] - 1)
 
     best_score = sys.maxint
     best_idx = None