diff --git a/modules/mol/alg/src/lddt.cc b/modules/mol/alg/src/lddt.cc
index 11e328e4deb40c00117dd666337af25a57112fc3..dcde44f0f8111a01094e26da90ca84d0deb54731 100644
--- a/modules/mol/alg/src/lddt.cc
+++ b/modules/mol/alg/src/lddt.cc
@@ -311,39 +311,20 @@ int main (int argc, char **argv)
   // if the reference file is a comma-separated list of files, switches to multi-
   // reference mode
   GlobalRDMap glob_dist_list; 
-  String ref_file=files.back();    
+  String ref_file=files.back();
   ost::StringRef ref_file_sr(ref_file.c_str(),ref_file.length());
   std::vector<StringRef> ref_file_split_sr=ref_file_sr.split(',');
-  if (ref_file_split_sr.size()==1) { 
-    std::cout << "Multi-reference mode: Off" << std::endl;  
-    String ref_filename = ref_file_split_sr[0].str();  
+  for (std::vector<StringRef>::const_iterator ref_file_split_sr_it = ref_file_split_sr.begin();
+       ref_file_split_sr_it != ref_file_split_sr.end();++ref_file_split_sr_it) {
+    String ref_filename = ref_file_split_sr_it->str();
     EntityHandle ref=load(ref_filename, profile);
     if (!ref) {
       exit(-1);
-    }  
-    EntityView refview=ref.GetChainList()[0].Select("peptide=true");
-    ref_list.push_back(refview);
-    glob_dist_list = CreateDistanceList(refview,radius);
-  } else {
-    std::cout << "Multi-reference mode: On" << std::endl;  
-    for (std::vector<StringRef>::const_iterator ref_file_split_sr_it = ref_file_split_sr.begin();
-         ref_file_split_sr_it != ref_file_split_sr.end();++ref_file_split_sr_it) {
-      String ref_filename = ref_file_split_sr_it->str();  
-      EntityHandle ref=load(ref_filename, profile);
-      if (!ref) {
-        exit(-1);
-      }
-      if (! ref_list.empty()) {
-        if (ref_list[0].GetChainList()[0].GetName()!=ref.GetChainList()[0].GetName()) {
-          std::cout << "ERROR: First chains in the reference structures have different names" << std::endl;
-          exit(-1);  
-        }    
-      }
-      EntityView refview=ref.GetChainList()[0].Select("peptide=true");
-      ref_list.push_back(ref.CreateFullView());
-    } 
-    glob_dist_list = CreateDistanceListFromMultipleReferences (ref_list,cutoffs,sequence_separation,radius);  
-  }         
+    }
+    ref_list.push_back(ref.CreateFullView());
+  }
+  CleanlDDTReferences(ref_list);
+  glob_dist_list = PreparelDDTGlobalRDMap(ref_list,cutoffs,sequence_separation,radius);
   files.pop_back();
 
   // prints out parameters used in the lddt calculation
diff --git a/modules/mol/alg/src/local_dist_diff_test.cc b/modules/mol/alg/src/local_dist_diff_test.cc
index aad66e7a639e265256fe5511a628203f2e57df53..b6e0ecc046cca187cedc3473657a7de62e7c0a31 100644
--- a/modules/mol/alg/src/local_dist_diff_test.cc
+++ b/modules/mol/alg/src/local_dist_diff_test.cc
@@ -536,6 +536,36 @@ Real LDDTHA(EntityView& v, const GlobalRDMap& global_dist_list, int sequence_sep
     return static_cast<Real>(total_ov.first)/(static_cast<Real>(total_ov.second) ? static_cast<Real>(total_ov.second) : 1);
 }
 
+
+void CleanlDDTReferences(std::vector<EntityView>& ref_list){
+  for (int i=0;i<ref_list.size();i++) {
+      if (ref_list[0].GetChainList()[0].GetName()!=ref_list[i].GetChainList()[0].GetName()) {
+        std::cout << "ERROR: First chains in the reference structures have different names" << std::endl;
+        exit(-1);
+    }
+    ref_list[i] = ref_list[i].GetChainList()[0].Select("peptide=true");
+  }
+}
+
+GlobalRDMap PreparelDDTGlobalRDMap(const std::vector<EntityView>& ref_list,
+                                   std::vector<Real>& cutoff_list,
+                                   int sequence_separation,
+                                   Real max_dist){
+  GlobalRDMap glob_dist_list;
+  if (ref_list.size()==1) {
+    std::cout << "Multi-reference mode: Off" << std::endl;
+    glob_dist_list = CreateDistanceList(ref_list[0], max_dist);
+  } else {
+    std::cout << "Multi-reference mode: On" << std::endl;
+    glob_dist_list = CreateDistanceListFromMultipleReferences(ref_list,
+                                                              cutoff_list,
+                                                              sequence_separation,
+                                                              max_dist);
+  }
+
+  return glob_dist_list;
+}
+
 // debugging code
 /*
 Real OldStyleLDDTHA(EntityView& v, const GlobalRDMap& global_dist_list)
diff --git a/modules/mol/alg/src/local_dist_diff_test.hh b/modules/mol/alg/src/local_dist_diff_test.hh
index 9dd2f230617ac1b0b795ec6a7e467a80c1485655..9eb5829fe6d9790b0030beab56067666469fbca7 100644
--- a/modules/mol/alg/src/local_dist_diff_test.hh
+++ b/modules/mol/alg/src/local_dist_diff_test.hh
@@ -135,6 +135,15 @@ void DLLEXPORT_OST_MOL_ALG PrintResidueRDMap(const ResidueRDMap& res_dist_list);
 // circular dependencies
 bool DLLEXPORT_OST_MOL_ALG IsStandardResidue(String rn);
 
+void DLLEXPORT_OST_MOL_ALG CleanlDDTReferences(std::vector<EntityView>& ref_list);
+
+// Prepare GlobalRDMap from reference list
+GlobalRDMap DLLEXPORT_OST_MOL_ALG PreparelDDTGlobalRDMap(
+    const std::vector<EntityView>& ref_list,
+    std::vector<Real>& cutoff_list,
+    int sequence_separation,
+    Real max_dist);
+
 }}}
 
 #endif