diff --git a/modules/mol/alg/pymod/chain_mapping.py b/modules/mol/alg/pymod/chain_mapping.py
index 1d64e874804a65605843693f3adf1055b93ed388..844e0052c7dbbac21c8f07630a1498dae2fd26ad 100644
--- a/modules/mol/alg/pymod/chain_mapping.py
+++ b/modules/mol/alg/pymod/chain_mapping.py
@@ -63,7 +63,7 @@ class MappingResult:
 
     @property
     def mapping(self):
-        """ Mapping of :attr:`model` chains onto :attr:`~target`
+        """ Mapping of :attr:`~model` chains onto :attr:`~target`
 
         Exact same shape as :attr:`~chem_groups` but containing the names of the
         mapped chains in :attr:`~model`. May contain None for :attr:`~target`
@@ -88,6 +88,21 @@ class MappingResult:
         """
         return self._alns
 
+    def JSONSummary(self):
+        """ Returns JSON serializable summary of results
+        """
+        json_dict = dict()
+        json_dict["chem_groups"] = self.chem_groups
+        json_dict["mapping"] = self.mapping
+        json_dict["alns"] = list()
+        for aln in self.alns.values():
+            trg_seq = aln.GetSequence(0)
+            mdl_seq = aln.GetSequence(1)
+            aln_dict = {"trg_ch": trg_seq.GetName(), "trg_seq": str(trg_seq),
+                        "mdl_ch": mdl_seq.GetName(), "mdl_seq": str(mdl_seq)}
+            json_dict["alns"].append(aln_dict)
+        return json_dict
+
 
 class ReprResult: