In the ClusterGraph objects, decorators for multiple atoms and bonds are added to the corresponding nodes and edges. The placement of these atoms will affect the SMIRKS patterns which are created (Section 3.3). Currently, the decision about how to place atoms is made iteratively. The tagged and untagged atoms and bonds for the first molecule are added to the graph. Then the atoms and bonds for each subsequent molecule are added. First the tagged atoms are compared with those already stored in the graph, and reordered if necessary. Then, for each layer any neighboring atoms are considered and added to the node of the graph which most closely agrees with their decorators. This process is slow because it requires comparing atoms and bonds in each layer for each molecule added. It is also order dependent. That is if the molecules were added in a different order, it is possible atoms could be added to different nodes. A potentially better approach would be to compare the complete graph for each fragment before changing the placement of atoms. We could imagine building a SingleGraph for each fragment. Then, all of those graphs could be used simultaneously to determine whole to best order of atoms in each fragment. There are many algorithms for overlaying molecules which could be potentially adapted for this purposes, but they would need to be restrained to keep the tagged atoms aligned correctly for the given parameter. For example, angle parameters with atoms in the order 1, 2, 3 or 3, 2, 1 are equivalent for the purpose of assigning parameters, but should not be reordered to 2, 1, 3 or 2, 3, 1. We should be able to learn from molecule overlay and graph similarity matching algorithms when improving this part of ChemPer.