diff --git a/modules/mol/alg/pymod/ligand_scoring.py b/modules/mol/alg/pymod/ligand_scoring.py
index d4b5c7bd753cea36febb010594494394654adc83..fdc61c75f968d90245de2e53b2f5fd07903cedba 100644
--- a/modules/mol/alg/pymod/ligand_scoring.py
+++ b/modules/mol/alg/pymod/ligand_scoring.py
@@ -434,6 +434,8 @@ class LigandScorer:
                         LogVerbose("No symmetry between %s and %s" % (
                             str(model_ligand), str(target_ligand)))
                         continue
+                    substructure_match = len(symmetries[0][0]) != len(
+                        model_ligand.atoms)
 
                     rmsd = SCRMSD(model_ligand, target_ligand,
                                   transformation=binding_site.transform,
@@ -452,7 +454,8 @@ class LigandScorer:
                             "bs_num_res": len(binding_site.substructure.residues),
                             "bs_num_overlap_res": len(binding_site.ref_residues),
                             "target_ligand": target_ligand,
-                            "model_ligand": model_ligand
+                            "model_ligand": model_ligand,
+                            "substructure_match": substructure_match,
                         }
                         LogDebug("Saved RMSD")
 
@@ -512,7 +515,8 @@ class LigandScorer:
                                 "bs_num_res": len(binding_site.substructure.residues),
                                 "bs_num_overlap_res": len(binding_site.ref_residues),
                                 "target_ligand": target_ligand,
-                                "model_ligand": model_ligand
+                                "model_ligand": model_ligand,
+                                "substructure_match": substructure_match,
                             }
                             LogDebug("Saved lDDT-PLI")
 
@@ -720,6 +724,10 @@ class LigandScorer:
         * `model_ligand`: residue handle of the model ligand
         * `chain_mapping`: local chain mapping as a dictionary, with target
           chain name as key and model chain name as value.
+        * `substructure_match`: whether the score is the result of a partial
+          (substructure) match. A value of `True` indicates that the target
+          ligand covers only part of the model, while `False` indicates a
+          perfect match.
 
         :rtype: :class:`dict`
         """
@@ -762,6 +770,10 @@ class LigandScorer:
         * `model_ligand`: residue handle of the model ligand
         * `chain_mapping`: local chain mapping as a dictionary, with target
           chain name as key and model chain name as value.
+        * `substructure_match`: whether the score is the result of a partial
+          (substructure) match. A value of `True` indicates that the target
+          ligand covers only part of the model, while `False` indicates a
+          perfect match.
 
         :rtype: :class:`dict`
         """