diff --git a/modules/mol/alg/pymod/wrap_mol_alg.cc b/modules/mol/alg/pymod/wrap_mol_alg.cc
index f00fea65b459a1e4634ec4cee561dbe7b43a7ea8..deb570db8bd52444686c1a783d739b3f28509feb 100644
--- a/modules/mol/alg/pymod/wrap_mol_alg.cc
+++ b/modules/mol/alg/pymod/wrap_mol_alg.cc
@@ -36,7 +36,7 @@ void export_entity_to_density();
 
 namespace {
   
-Real (*lddt_a)(const mol::EntityView&, const mol::alg::GlobalRDMap& , std::vector<Real>, const String&)=&mol::alg::LocalDistDiffTest;
+std::pair<long int,long int> (*lddt_a)(const mol::EntityView&, const mol::alg::GlobalRDMap& , std::vector<Real>, const String&)=&mol::alg::LocalDistDiffTest;
 Real (*lddt_c)(const mol::EntityView&, const mol::EntityView& , Real, Real, const String&)=&mol::alg::LocalDistDiffTest;
 Real (*lddt_b)(const seq::AlignmentHandle&,Real, Real, int, int)=&mol::alg::LocalDistDiffTest;
 mol::EntityView (*fc_a)(const mol::EntityView&, const mol::alg::ClashingDistances&,bool)=&mol::alg::FilterClashes;
diff --git a/modules/mol/alg/src/lddt.cc b/modules/mol/alg/src/lddt.cc
index 4009cd3a86eb104a5e309a74f443b7465c9e29ab..9c2c1bf6121e6137e330ba03de6267753086fba3 100644
--- a/modules/mol/alg/src/lddt.cc
+++ b/modules/mol/alg/src/lddt.cc
@@ -16,6 +16,7 @@
 // along with this library; if not, write to the  Free Software Foundation, Inc.,
 // 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 //------------------------------------------------------------------------------
+#include <iomanip>
 #if defined (_MSC_VER)
 #define BOOST_ALL_DYN_LINK 1
 #endif
@@ -101,7 +102,7 @@ int main (int argc, char **argv)
   String version = "Beta - 2012-06-13";
   Real bond_tolerance = 8.0;
   Real angle_tolerance = 8.0;
-  Real radius=15.0;
+  Real radius=15.0; 
   
   IOProfile profile;
   profile.bond_feasibility_check=false;
@@ -296,19 +297,32 @@ int main (int argc, char **argv)
       std::cout << "Global LDDT score: 0.0" << std::endl;
       return 0;
     }
-    Real lddt=LDDTHA(v, glob_dist_list);	
 
+    std::vector<Real> cutoffs;
+    cutoffs.push_back(0.5);
+    cutoffs.push_back(1.0);
+    cutoffs.push_back(2.0);
+    cutoffs.push_back(4.0);
+    String label="localldt";
+    std::pair<int,int> total_ov=alg::LocalDistDiffTest(v, glob_dist_list, cutoffs, label);
+    Real lddt = static_cast<Real>(total_ov.first)/(static_cast<Real>(total_ov.second) ? static_cast<Real>(total_ov.second) : 1);
     std::cout << "Global LDDT score: " << lddt << std::endl;
+    std::cout << "(" << std::fixed << total_ov.first << " conserved distances in the model out of " << total_ov.second  << " checked)" << std::endl;
+    
     std::cout << "Local LDDT Score:" << std::endl;
-    std::cout << "Chain\tResName\tResNum\tScore" << std::endl;
+    std::cout << "Chain\tResName\tResNum\tScore\t(Conserved/Total)" << std::endl;
     for (ResidueViewIter rit=v.ResiduesBegin();rit!=v.ResiduesEnd();++rit){
       ResidueView ritv = *rit;
       Real lddt_local = 0;
-      if (ritv.HasProp("locallddt")) {
-          lddt_local=ritv.GetFloatProp("locallddt");
+      int conserved_dist = 0;
+      int total_dist = 0;      
+      if (ritv.HasProp(label)) {
+          lddt_local=ritv.GetFloatProp(label);
+          conserved_dist=ritv.GetIntProp(label+"_conserved");
+	  total_dist=ritv.GetIntProp(label+"_total");
       }
       if (lddt_local!=0) {
-        std::cout << ritv.GetChain() << "\t" << ritv.GetName() << "\t" << ritv.GetNumber() << '\t' << lddt_local << std::endl;
+        std::cout << ritv.GetChain() << "\t" << ritv.GetName() << "\t" << ritv.GetNumber() << '\t' << lddt_local << "\t" << "("<< conserved_dist << "/" << total_dist << ")" <<std::endl;
       }
     }
     std::cout << std::endl;
diff --git a/modules/mol/alg/src/local_dist_diff_test.cc b/modules/mol/alg/src/local_dist_diff_test.cc
index 37b38d89a7d4a0d55ceac1609d1fc847964d3462..0511e71ef0fb397f135e3f18f86afab6c7653f6d 100644
--- a/modules/mol/alg/src/local_dist_diff_test.cc
+++ b/modules/mol/alg/src/local_dist_diff_test.cc
@@ -78,7 +78,7 @@ std::pair<bool,Real> within_tolerance(Real mdl_dist, std::pair<Real,Real>& value
 std::pair<Real, Real> calc_overlap1(const ResidueRDMap& res_distance_list, const ResNum& rnum,
                                     ChainView mdl_chain, 
                                     std::vector<Real>& tol_list, bool only_fixed, 
-                                    bool swap,std::vector<std::pair<Real, Real> >& overlap_list, bool log )
+                                    bool swap,std::vector<std::pair<long int, long int> >& overlap_list, bool log )
 {
   std::pair<Real, Real> overlap(0.0, 0.0);
   ResidueView mdl_res=mdl_chain.FindResidue(rnum); 
@@ -226,7 +226,7 @@ std::pair<Real, Real> calc_overlap2(const seq::ConstSequenceHandle& ref_seq,
   return overlap;
 }
 
-void check_and_swap(const GlobalRDMap& glob_dist_list, const EntityView& mdl, std::vector<Real> cutoff_list,  std::vector<std::pair<Real, Real> > overlap_list)
+void check_and_swap(const GlobalRDMap& glob_dist_list, const EntityView& mdl, std::vector<Real> cutoff_list,  std::vector<std::pair<long int, long int> > overlap_list)
 {
   ChainView mdl_chain=mdl.GetChainList()[0]; 
   XCSEditor edi=mdl.GetHandle().EditXCS(BUFFERED_EDIT);
@@ -471,7 +471,7 @@ GlobalRDMap CreateDistanceListFromMultipleReferences(const std::vector<EntityVie
   ref_counter++;  
   for (std::vector<EntityView>::const_iterator ref_list_it=ref_list.begin()+1;ref_list_it!=ref_list.end();++ref_list_it) {
        EntityView ref = *ref_list_it;
-       std::vector<std::pair<Real, Real> > overlap_list(ref.GetResidueCount(), std::pair<Real, Real>(0.0, 0.0));
+       std::vector<std::pair<long int, long int> > overlap_list(ref.GetResidueCount(), std::pair<long int, long int>(0, 0));
        check_and_swap(glob_dist_list,ref,cutoff_list,overlap_list);
        GlobalRDMap new_dist_list=CreateDistanceList(ref,max_dist);
        merge_distance_lists(glob_dist_list,new_dist_list,ex_map,ref,ref_counter);
@@ -503,22 +503,22 @@ void PrintGlobalRDMap(const GlobalRDMap& glob_dist_list){
 
 
 
-Real LocalDistDiffTest(const EntityView& mdl, const GlobalRDMap& glob_dist_list,
+std::pair<long int,long int> LocalDistDiffTest(const EntityView& mdl, const GlobalRDMap& glob_dist_list,
                    std::vector<Real> cutoff_list, const String& local_lddt_property_string)
 {
   if (!mdl.GetResidueCount()) {
     LOG_WARNING("model structures doesn't contain any residues");
-    return 0.0;
+    return std::make_pair<long int,long int>(0,0);
   }
   if (glob_dist_list.size()==0) {
     LOG_WARNING("global reference list is empty");
-    return 0.0;
+    return std::make_pair<long int,long int>(0,0);
   }
-  std::vector<std::pair<Real, Real> > overlap_list(mdl.GetResidueCount(), std::pair<Real, Real>(0.0, 0.0));
+  std::vector<std::pair<long int, long int> > overlap_list(mdl.GetResidueCount(), std::pair<long int, long int>(0, 0));
   check_and_swap(glob_dist_list,mdl,cutoff_list,overlap_list);
   ChainView mdl_chain=mdl.GetChainList()[0];  
   overlap_list.clear();
-  std::pair<Real, Real> total_ov(0.0, 0.0);
+  std::pair<long int, long int> total_ov(0, 0);
   for (GlobalRDMap::const_iterator i=glob_dist_list.begin(), e=glob_dist_list.end(); i!=e; ++i) {
     ResNum rn = i->first;
     if (i->second.size()!=0) {
@@ -531,13 +531,15 @@ Real LocalDistDiffTest(const EntityView& mdl, const GlobalRDMap& glob_dist_list,
       ResidueView mdlr=mdl_chain.FindResidue(rn);  
       if (mdlr.IsValid()) {
         int mdl_res_index =mdlr.GetIndex();
-        Real local_lddt=overlap_list[mdl_res_index].first/(overlap_list[mdl_res_index].second ? overlap_list[mdl_res_index].second : 1);
+        Real local_lddt=static_cast<Real>(overlap_list[mdl_res_index].first)/(static_cast<Real>(overlap_list[mdl_res_index].second) ? static_cast<Real>(overlap_list[mdl_res_index].second) : 1);
         mdlr.SetFloatProp(local_lddt_property_string, local_lddt);
+        mdlr.SetIntProp(local_lddt_property_string+"_conserved", overlap_list[mdl_res_index].first);	
+        mdlr.SetIntProp(local_lddt_property_string+"_total", overlap_list[mdl_res_index].second);	
       }  
     }       
   }
   overlap_list.clear();
-  return total_ov.first/(total_ov.second ? total_ov.second : 1);
+  return std::make_pair<long int,long int>(total_ov.first,total_ov.second);
 }
 
 Real LocalDistDiffTest(const EntityView& mdl, const EntityView& target, Real cutoff, Real max_dist, const String& local_lddt_property_string)
@@ -545,11 +547,11 @@ Real LocalDistDiffTest(const EntityView& mdl, const EntityView& target, Real cut
    std::vector<Real> cutoffs;
    cutoffs.push_back(cutoff);
    GlobalRDMap glob_dist_list = CreateDistanceList(target,max_dist);
-   return LocalDistDiffTest(mdl, glob_dist_list, cutoffs, local_lddt_property_string);
+   std::pair<long int,long int>  total_ov = LocalDistDiffTest(mdl, glob_dist_list, cutoffs, local_lddt_property_string);
+   return static_cast<Real>(total_ov.first)/(static_cast<Real>(total_ov.second) ? static_cast<Real>(total_ov.second) : 1);
 }
 
 
-
 Real LocalDistDiffTest(const ost::seq::AlignmentHandle& aln,
                    Real cutoff, Real max_dist, int ref_index, int mdl_index)
 {
@@ -597,8 +599,7 @@ Real LocalDistDiffTest(const ost::seq::AlignmentHandle& aln,
      total_ov.first+=ov1.first;
      total_ov.second+=ov1.second;
   }
-  return total_ov.first/(total_ov.second ? total_ov.second : 1);
-  return 0.0;
+   return total_ov.first/(total_ov.second ? total_ov.second : 1);
 }
 
 Real LDDTHA(EntityView& v, const GlobalRDMap& global_dist_list)
@@ -609,8 +610,8 @@ Real LDDTHA(EntityView& v, const GlobalRDMap& global_dist_list)
     cutoffs.push_back(2.0);
     cutoffs.push_back(4.0);
     String label="locallddt";
-    Real lddt=alg::LocalDistDiffTest(v, global_dist_list, cutoffs, label);
-    return lddt;
+    std::pair<long int,long int> total_ov=alg::LocalDistDiffTest(v, global_dist_list, cutoffs, label);
+    return static_cast<Real>(total_ov.first)/(static_cast<Real>(total_ov.second) ? static_cast<Real>(total_ov.second) : 1);
 }
 
 Real OldStyleLDDTHA(EntityView& v, const GlobalRDMap& global_dist_list)
@@ -618,16 +619,20 @@ Real OldStyleLDDTHA(EntityView& v, const GlobalRDMap& global_dist_list)
     Real lddt =0;
     std::vector<Real> cutoffs05;
     cutoffs05.push_back(0.5);
-    Real lddt05=alg::LocalDistDiffTest(v, global_dist_list, cutoffs05, "locallddt0.5");
+    std::pair<Real,Real> lddt05o=alg::LocalDistDiffTest(v, global_dist_list, cutoffs05, "locallddt0.5");
     std::vector<Real> cutoffs1;
     cutoffs1.push_back(1.0);
-    Real lddt1=alg::LocalDistDiffTest(v, global_dist_list, cutoffs1, "locallddt1");
+    std::pair<Real,Real> lddt1o=alg::LocalDistDiffTest(v, global_dist_list, cutoffs1, "locallddt1");
     std::vector<Real> cutoffs2;
     cutoffs2.push_back(2.0);
-    Real lddt2=alg::LocalDistDiffTest(v, global_dist_list, cutoffs2, "locallddt2");
+    std::pair<Real,Real> lddt2o=alg::LocalDistDiffTest(v, global_dist_list, cutoffs2, "locallddt2");
     std::vector<Real> cutoffs4;
     cutoffs4.push_back(4.0);
-    Real lddt4=alg::LocalDistDiffTest(v, global_dist_list, cutoffs4, "locallddt4");
+    std::pair<Real,Real> lddt4o=alg::LocalDistDiffTest(v, global_dist_list, cutoffs4, "locallddt4");
+    Real lddt05 = lddt05o.first/(lddt05o.second ? lddt05o.second : 1);
+    Real lddt1 = lddt1o.first/(lddt1o.second ? lddt1o.second : 1);
+    Real lddt2 = lddt2o.first/(lddt2o.second ? lddt2o.second : 1);
+    Real lddt4 = lddt4o.first/(lddt4o.second ? lddt4o.second : 1);            
     lddt = (lddt05+lddt1+lddt2+lddt4)/4.0;
     for (ResidueViewIter rit=v.ResiduesBegin();rit!=v.ResiduesEnd();++rit){
       ResidueView ritv = *rit;
diff --git a/modules/mol/alg/src/local_dist_diff_test.hh b/modules/mol/alg/src/local_dist_diff_test.hh
index 6e1c28a8088b1fade9918ce2c8d46653e9e6531f..7ed7e46586a6a0becd36c60682176f8a7323f440 100644
--- a/modules/mol/alg/src/local_dist_diff_test.hh
+++ b/modules/mol/alg/src/local_dist_diff_test.hh
@@ -55,7 +55,7 @@ typedef std::map<std::pair<UniqueAtomIdentifier,UniqueAtomIdentifier>,std::pair<
 typedef std::map<ost::mol::ResNum,ResidueRDMap> GlobalRDMap;
 typedef std::map<UniqueAtomIdentifier,int> ExistenceMap;
 
-Real DLLEXPORT_OST_MOL_ALG LocalDistDiffTest(const EntityView& mdl,
+std::pair<long int,long int> DLLEXPORT_OST_MOL_ALG LocalDistDiffTest(const EntityView& mdl,
                                          const GlobalRDMap& dist_list,
                                          std::vector<Real> cutoff_list, 
                                          const String& local_ldt_property_string="");