diff --git a/modules/mol/alg/tests/test_qsscoring.py b/modules/mol/alg/tests/test_qsscoring.py
index a5bd282a71e1590a01d77ee55d17c0854289b32c..2ada7dfe98cd7e295e4c7d0ba7fe390cf5c9ae75 100644
--- a/modules/mol/alg/tests/test_qsscoring.py
+++ b/modules/mol/alg/tests/test_qsscoring.py
@@ -179,6 +179,13 @@ class TestQSscore(unittest.TestCase):
     self.assertAlmostEqual(qs_scorer.global_score, 0.3131, 2)
     self.assertAlmostEqual(qs_scorer.best_score, 0.941, 2)
     self._CheckScorer(qs_scorer)
+    # check properties
+    self.assertFalse(qs_scorer.calpha_only)
+    self.assertEqual(qs_scorer.chem_mapping,
+                     {('A', 'C'): ('A',), ('B', 'D'): ('B',)})
+    self.assertEqual(sorted(qs_scorer.symm_1), [('A', 'B'), ('C', 'D')])
+    self.assertEqual(sorted(qs_scorer.symm_2), [('A', 'B')])
+    self.assertEqual(qs_scorer.chain_mapping, {'A': 'A', 'B': 'B'})
 
   def test_HeteroCase3(self):
     # more chains
@@ -188,15 +195,36 @@ class TestQSscore(unittest.TestCase):
     self.assertAlmostEqual(qs_scorer.global_score, 0.359, 2)
     self.assertAlmostEqual(qs_scorer.best_score, 0.958, 2)
     self._CheckScorer(qs_scorer)
+    # check properties
+    self.assertFalse(qs_scorer.calpha_only)
+    self.assertEqual(qs_scorer.chem_mapping,
+                     {('A', 'C', 'E', 'G', 'I', 'K'): ('A', 'C', 'E'),
+                      ('B', 'D', 'F', 'H', 'J', 'L'): ('B', 'D', 'F')})
+    self.assertEqual(sorted(qs_scorer.symm_1),
+                     [('A', 'B'), ('C', 'D'), ('E', 'F'),
+                      ('G', 'H'), ('I', 'J'), ('K', 'L')])
+    self.assertEqual(sorted(qs_scorer.symm_2),
+                     [('A', 'B'), ('C', 'D'), ('E', 'F')])
+    self.assertEqual(qs_scorer.chain_mapping,
+                     {'A':'A', 'B':'B', 'G':'C', 'H':'D', 'I':'E', 'J':'F'})
+
     # user's symmetry groups
-    symm_1 = [('A', 'B'), ('C', 'D'), ('E', 'F'),
-              ('G', 'H'), ('I', 'J'), ('K', 'L')]
-    symm_2 = [('A', 'B'), ('C', 'D'), ('E', 'F')]
+    symm_1 = [('E', 'D', 'C', 'B', 'A', 'F'), ('G', 'J', 'I', 'L', 'K', 'H')]
+    symm_2 = [('A', 'B', 'C', 'D', 'E', 'F')]
     # use QSscoreEntity to go faster
     qs_scorer_symm = QSscorer(qs_scorer.qs_ent_1, qs_scorer.qs_ent_2)
     qs_scorer_symm.SetSymmetries(symm_1, symm_2)
-    self.assertAlmostEqual(qs_scorer_symm.global_score, qs_scorer.global_score)
-    self.assertAlmostEqual(qs_scorer_symm.best_score, qs_scorer.best_score)
+    self.assertAlmostEqual(qs_scorer_symm.global_score,
+                           qs_scorer.global_score, 2)
+    self.assertAlmostEqual(qs_scorer_symm.best_score, qs_scorer.best_score, 2)
+    self._CheckScorer(qs_scorer_symm)
+    # check properties
+    self.assertFalse(qs_scorer_symm.calpha_only)
+    self.assertEqual(qs_scorer_symm.chem_mapping, qs_scorer.chem_mapping)
+    self.assertEqual(qs_scorer_symm.symm_1, symm_1)
+    self.assertEqual(qs_scorer_symm.symm_2, symm_2)
+    self.assertEqual(qs_scorer_symm.chain_mapping,
+                     {'C':'A', 'D':'B', 'E':'E', 'F':'F', 'K':'C', 'L':'D'})
     self._CheckScorer(qs_scorer_symm)
 
   def test_HeteroCase4(self):
@@ -248,6 +276,10 @@ class TestQSscore(unittest.TestCase):
     self.assertAlmostEqual(qs_scorer.global_score, 0.323, 2)
     self.assertAlmostEqual(qs_scorer.best_score, 0.921, 2)
     self._CheckScorer(qs_scorer)
+    # check properties
+    self.assertFalse(qs_scorer.calpha_only)
+    self.assertEqual(qs_scorer.chem_mapping, {('A',): ('A',), ('B',): ('B',)})
+    self.assertEqual(qs_scorer.chain_mapping, {'A': 'A', 'B': 'B'})
 
 
   # TESTS HOMO
@@ -260,6 +292,12 @@ class TestQSscore(unittest.TestCase):
     self.assertAlmostEqual(qs_scorer.global_score, 0.147, 2)
     self.assertAlmostEqual(qs_scorer.best_score, 0.866, 2)
     self._CheckScorer(qs_scorer)
+    # check properties
+    self.assertFalse(qs_scorer.calpha_only)
+    self.assertEqual(qs_scorer.chem_mapping, {('A', 'B'): ('B', 'C', 'D', 'A')})
+    self.assertEqual(sorted(qs_scorer.symm_1), [('A', 'B')])
+    self.assertEqual(sorted(qs_scorer.symm_2), [('B', 'A'), ('C', 'D')])
+    self.assertEqual(qs_scorer.chain_mapping, {'A': 'B', 'B': 'A'})
 
   def test_HomoCase2(self):
     # broken cyclic symmetry
@@ -278,6 +316,7 @@ class TestQSscore(unittest.TestCase):
     self.assertEqual(sorted(qs_scorer.symm_2), [('B', 'A')])
     self.assertEqual(qs_scorer.chain_mapping, {'A': 'A', 'B': 'B'})
     self._CheckScorer(qs_scorer)
+
     # using user symmetry groups
     symm_1 = [('A', 'B'), ('C', 'D'), ('E', 'F')]
     symm_2 = [('A', 'B')]
@@ -345,6 +384,12 @@ class TestQSscore(unittest.TestCase):
     self.assertAlmostEqual(qs_scorer2.best_score, 1.00, 2)
     self.assertAlmostEqual(qs_scorer2.lddt_score, 0.483, 2)
     self._CheckScorerLDDT(qs_scorer)
+    # check properties
+    self.assertFalse(qs_scorer.calpha_only)
+    self.assertEqual(qs_scorer.chem_mapping, {('B', 'A'): ('B', 'C', 'D', 'A')})
+    self.assertEqual(sorted(qs_scorer.symm_1), [('B', 'A')])
+    self.assertEqual(sorted(qs_scorer.symm_2), [('B', 'A'), ('C', 'D')])
+    self.assertEqual(qs_scorer.chain_mapping, {'A': 'A', 'B': 'B'})
 
 
   # TEST BIG STUFF and FANCY SYMMETRIES
@@ -357,6 +402,19 @@ class TestQSscore(unittest.TestCase):
     self.assertAlmostEqual(qs_scorer.global_score, 1/4., 2)
     self.assertAlmostEqual(qs_scorer.best_score, 1.0, 2)
     self._CheckScorer(qs_scorer)
+    # check properties
+    self.assertFalse(qs_scorer.calpha_only)
+    self.assertEqual(qs_scorer.chem_mapping,
+            {('A', 'C', 'E', 'G', 'I', 'K', 'M', 'O'): ('A', 'C', 'E', 'G'),
+             ('B', 'D', 'F', 'H', 'J', 'L', 'N', 'P'): ('B', 'D', 'F', 'H')})
+    self.assertEqual(sorted(qs_scorer.symm_1),
+                     [('A', 'B'), ('C', 'D'), ('E', 'F'), ('G', 'H'),
+                      ('I', 'J'), ('K', 'L'), ('M', 'N'), ('O', 'P')])
+    self.assertEqual(sorted(qs_scorer.symm_2),
+                     [('A', 'B'), ('C', 'D'), ('E', 'F'), ('G', 'H')])
+    self.assertEqual(qs_scorer.chain_mapping,
+                     {'A': 'A', 'C': 'C', 'B': 'B', 'E': 'E',
+                      'D': 'D', 'G': 'G', 'F': 'F', 'H': 'H'})
 
   def test_Capsid(self):
     ent_1 = _LoadFile('4gh4.2.pdb') # A5 B5 C5 D5, symmetry: C5
@@ -365,6 +423,26 @@ class TestQSscore(unittest.TestCase):
     self.assertAlmostEqual(qs_scorer.global_score, 0.921, 2)
     self.assertAlmostEqual(qs_scorer.best_score, 0.941, 2)
     self._CheckScorer(qs_scorer)
+    # check properties
+    self.assertFalse(qs_scorer.calpha_only)
+    self.assertEqual(qs_scorer.chem_mapping,
+            {('D', 'H', 'L', 'P', 'T'): ('D', 'H', 'L', 'P', 'T'),
+             ('A', 'E', 'I', 'M', 'Q'): ('A', 'E', 'I', 'M', 'Q'),
+             ('C', 'G', 'K', 'O', 'S'): ('C', 'G', 'K', 'O', 'S'),
+             ('B', 'F', 'J', 'N', 'R'): ('B', 'F', 'J', 'N', 'R')})
+    self.assertEqual(sorted(qs_scorer.symm_1),
+                     [('D', 'A', 'S', 'B'), ('H', 'E', 'C', 'F'),
+                      ('L', 'I', 'G', 'J'), ('P', 'M', 'K', 'N'),
+                      ('T', 'Q', 'O', 'R')])
+    self.assertEqual(sorted(qs_scorer.symm_2),
+                     [('D', 'A', 'S', 'B'), ('H', 'E', 'C', 'F'),
+                      ('L', 'I', 'G', 'J'), ('P', 'M', 'K', 'N'),
+                      ('T', 'Q', 'O', 'R')])
+    self.assertEqual(qs_scorer.chain_mapping,
+                     {'A': 'A', 'C': 'C', 'B': 'B', 'E': 'E', 'D': 'D',
+                      'G': 'G', 'F': 'F', 'I': 'I', 'H': 'H', 'K': 'K',
+                      'J': 'J', 'M': 'M', 'L': 'L', 'O': 'O', 'N': 'N',
+                      'Q': 'Q', 'P': 'P', 'S': 'S', 'R': 'R', 'T': 'T'})
 
   def test_TetrahedralSymmetry(self):
     ent_1 = _LoadFile('1mog.1.pdb') # A12, symmetry: T
@@ -373,6 +451,21 @@ class TestQSscore(unittest.TestCase):
     self.assertAlmostEqual(qs_scorer.global_score, 0.954, 2)
     self.assertAlmostEqual(qs_scorer.best_score, 0.994, 2)
     self._CheckScorer(qs_scorer)
+    # check properties
+    self.assertFalse(qs_scorer.calpha_only)
+    self.assertEqual(qs_scorer.chem_mapping,
+            {('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'): \
+               ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L')})
+    self.assertEqual(sorted(qs_scorer.symm_1),
+                     [('A', 'D'), ('B', 'E'), ('C', 'F'),
+                      ('G', 'J'), ('H', 'K'), ('I', 'L')])
+    self.assertEqual(sorted(qs_scorer.symm_2),
+                     [('A', 'G'), ('B', 'I'), ('C', 'E'),
+                      ('D', 'K'), ('F', 'J'), ('H', 'L')])
+    self.assertEqual(qs_scorer.chain_mapping,
+                     {'A': 'K', 'C': 'L', 'B': 'J', 'E': 'F',
+                      'D': 'D', 'G': 'I', 'F': 'H', 'I': 'G',
+                      'H': 'E', 'K': 'C', 'J': 'B', 'L': 'A'})
 
   def test_Urease(self):
     ent_1 = _LoadFile('1e9y.1.pdb') # A12 B12, symmetry: T
@@ -381,6 +474,27 @@ class TestQSscore(unittest.TestCase):
     self.assertAlmostEqual(qs_scorer.global_score, 0.958, 2)
     self.assertAlmostEqual(qs_scorer.best_score, 0.958, 2)
     self._CheckScorer(qs_scorer)
+    # check properties
+    self.assertFalse(qs_scorer.calpha_only)
+    self.assertEqual(qs_scorer.chem_mapping,
+            {('B', 'D', 'F', 'H', 'J', 'L', 'N', 'P', 'R', 'T', 'V', 'X'): \
+               ('B', 'D', 'F', 'H', 'J', 'L', 'N', 'P', 'R', 'T', 'V', 'X'),
+             ('A', 'C', 'E', 'G', 'I', 'K', 'M', 'O', 'Q', 'S', 'U', 'W'): \
+               ('A', 'C', 'E', 'G', 'I', 'K', 'M', 'O', 'Q', 'S', 'U', 'W')})
+    self.assertEqual(sorted(qs_scorer.symm_1),
+                     [('B', 'Q'), ('D', 'G'), ('F', 'W'), ('H', 'U'),
+                      ('J', 'K'), ('L', 'S'), ('N', 'A'), ('P', 'E'),
+                      ('R', 'M'), ('T', 'I'), ('V', 'C'), ('X', 'O')])
+    self.assertEqual(sorted(qs_scorer.symm_2),
+                     [('B', 'Q'), ('D', 'W'), ('F', 'U'), ('H', 'C'),
+                      ('J', 'K'), ('L', 'S'), ('N', 'A'), ('P', 'E'),
+                      ('R', 'M'), ('T', 'I'), ('V', 'O'), ('X', 'G')])
+    self.assertEqual(qs_scorer.chain_mapping,
+                     {'A': 'A', 'C': 'W', 'B': 'B', 'E': 'E', 'D': 'X',
+                      'G': 'G', 'F': 'F', 'I': 'I', 'H': 'H', 'K': 'K',
+                      'J': 'J', 'M': 'M', 'L': 'L', 'O': 'O', 'N': 'N',
+                      'Q': 'Q', 'P': 'P', 'S': 'S', 'R': 'R', 'U': 'C',
+                      'T': 'T', 'W': 'U', 'V': 'D', 'X': 'V'})
 
   def test_C6SymmetryHetero(self):
     ent_1 = _LoadFile('3j3r.1.pdb') # A6 B6, symmetry: C6
@@ -389,6 +503,21 @@ class TestQSscore(unittest.TestCase):
     self.assertAlmostEqual(qs_scorer.global_score, 0.559, 2)
     self.assertAlmostEqual(qs_scorer.best_score, 0.559, 2)
     self._CheckScorer(qs_scorer)
+    # check properties
+    self.assertFalse(qs_scorer.calpha_only)
+    self.assertEqual(qs_scorer.chem_mapping,
+            {('A', 'B', 'C', 'D', 'E', 'F'): ('A', 'B', 'C', 'D', 'E', 'F'),
+             ('G', 'H', 'I', 'J', 'K', 'L'): ('G', 'H', 'I', 'J', 'K', 'L')})
+    self.assertEqual(sorted(qs_scorer.symm_1),
+                     [('A', 'G'), ('B', 'H'), ('C', 'I'),
+                      ('D', 'J'), ('E', 'K'), ('F', 'L')])
+    self.assertEqual(sorted(qs_scorer.symm_2),
+                     [('A', 'G'), ('B', 'H'), ('C', 'I'),
+                      ('D', 'J'), ('E', 'K'), ('F', 'L')])
+    self.assertEqual(qs_scorer.chain_mapping,
+                     {'A': 'A', 'C': 'C', 'B': 'B', 'E': 'E',
+                      'D': 'D', 'G': 'G', 'F': 'F', 'I': 'I',
+                      'H': 'H', 'K': 'K', 'J': 'J', 'L': 'L'})
 
   def test_OctahedralSymmetry(self):
     ent_1 = _LoadFile('3vcd.1.pdb') # A24, symmetry: O
@@ -397,6 +526,28 @@ class TestQSscore(unittest.TestCase):
     self.assertAlmostEqual(qs_scorer.global_score, 0.975, 2)
     self.assertAlmostEqual(qs_scorer.best_score, 0.975, 2)
     self._CheckScorer(qs_scorer)
+    # check properties
+    self.assertFalse(qs_scorer.calpha_only)
+    self.assertEqual(qs_scorer.chem_mapping,
+            {('A', 'E', 'I', 'M', 'Q', 'U', 'B', 'C', 'D', 'F', 'G', 'H',
+              'J', 'K', 'L', 'N', 'O', 'P', 'R', 'S', 'T', 'V', 'W', 'X'): \
+               ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
+                'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X')})
+    self.assertEqual(sorted(qs_scorer.symm_1),
+                     [('A', 'X'), ('B', 'H'), ('C', 'P'), ('D', 'K'),
+                      ('E', 'I'), ('F', 'J'), ('G', 'T'), ('L', 'R'),
+                      ('M', 'S'), ('O', 'V'), ('Q', 'N'), ('U', 'W')])
+    self.assertEqual(sorted(qs_scorer.symm_2),
+                     [('A', 'O'), ('B', 'M'), ('C', 'N'), ('D', 'G'),
+                      ('E', 'H'), ('F', 'I'), ('J', 'W'), ('K', 'X'),
+                      ('L', 'V'), ('P', 'T'), ('Q', 'U'), ('R', 'S')])
+    self.assertEqual(qs_scorer.chain_mapping,
+                     {'A': 'J', 'C': 'L', 'B': 'K', 'E': 'P', 'D': 'R',
+                      'G': 'O', 'F': 'Q', 'I': 'T', 'H': 'X', 'K': 'S',
+                      'J': 'U', 'M': 'G', 'L': 'I', 'O': 'N', 'N': 'H',
+                      'Q': 'E', 'P': 'V', 'S': 'D', 'R': 'F', 'U': 'B',
+                      'T': 'A', 'W': 'M', 'V': 'C', 'X': 'W'})
+
 
   ###########################################################################
   # HELPERS