In this case we have solved the matching problem if we identify in a database of molecular three-dimensional structures one or several sub-structures of three carboxylate-oxygens and a calcium ion with Cartesian coordinates \(\mathbf{O}_{1},\mathbf{O}_{2},\mathbf{O}_{3}\) and \(\mathbf{Ca}\), respectively, so that the root-mean-square-deviation (RMSD) \(R\) between the groups is minimal, i.e. \(R=\sqrt{\frac{1}{4}\left(\left(\mathbf{Ca}-\mathbf{ca}\right)^{2}+\sum_{i=1}^{ 3}\left(\mathbf{O}_{i}-\mathbf{o}_{i}\right)^{2}\right)}\overset{!}{=}\min\). It is noteworthy that there are three atoms of the same type (oxygen) in both sets. This means that the matching problem has two aspects: one has to find not only a matching set of atoms but also the permutation that leads to the minimal \(R\). Further, it should be noted that we imply a simple model that is frequently used in which molecules are sets of point-like atoms, or pseudo-atoms representing building-blocks such as amino-acids in proteins; each atom or pseudo-atom is given by its Cartesian coordinates and a nominal type descriptor. Several approaches have been applied to the solution of this and related 3D-matching problems (for reviews see e.g. Ref. [3, 4]). For the important macromolecular class of proteins, several efficient matching algorithms such as Dali[5] or Sgap[6] have been devised that make explicit use of special properties of proteins as the sequential and spatial arrangement of their secondary structures and that therefore are very fast. More generally applicable is the geometric hashing approach: one first prepares a large hash table encoding all structures in the database, then the query is very efficiently compared to the entries of the table [7]. The matching problem can be formulated elegantly in terms of graph theory with vertices corresponding to (pseudo-)atoms and edges corresponding to Cartesian distances or chemical bonds. Consequently, many algorithms have been invented to solve the matching problem in the form of a search for isomorphic subgraphs, especially maximum common subgraphs (MCS) of two graphs (for review see [8]); a well-known member of this family is the algorithm by [PERSON] [15] that has been adapted for molecular matching problems in Assam[9]. The [PERSON] algorithm represents the graphs to be matched by adjacency matrices with elements 1 symbolizing neighborhood and 0 otherwise. The matching could then be carried out by brute-force comparison; however, [PERSON] reduces the search space by a refinement procedure that early on eliminates 1-elements that violate conditions that have to be fulfilled by isomorphic graphs. We propose an approach for the solution of the matching problem that does not take into account the sequential nature or secondary structures of proteins. Instead, our EpitopeMatch algorithm identifies epitopes that are similar to a query epitope comprising an arbitrary set of atoms given by their types and Cartesian coordinates. The algorithm thus is applicable to general macromolecules without adaptation. Further, the proposed algorithm is a one-pass method that operates directly on the macromolecular structure sets, e.g. in the form of the widely used files from the Protein Data Bank without preparatory steps. This feature is important for us since we apply the method also in the process of protein engineering for on-the-fly comparisons of many novel structures generated _in silico_. In terms of graph theory our method is a heuristic to identify common, connected, approximately maximal subgraphs of two graphs. Unlike the Ullmann algorithm EpitopeMatch does not operate on adjacency matrices but first tries to find small and accurately matching subgraphs and then iteratively extends and joins these matches to larger and less accurately matching subgraphs. The iterative nature makes EpitopeMatch superficially similar to the Maxsub algorithm [10], though the latter algorithm has been formulated for chemical 2D-graphs. Although EpitopeMatch makes use of cliques, it does not aim at finding all cliques as e.g.