We address the problem of enumerating all maximal clique-partitions of an undirected graph and present an algorithm based on the observation that every maximal clique-partition can be produced from the maximal clique-cover of the graph by assigning the vertices shared among maximal cliques, to belong to only one clique. This simple algorithm has the following drawbacks: (1) the search space is very large; (2) it finds some clique-partitions which are not maximal; and (3) some cliquepartitions are found more than once. We propose two criteria to avoid these drawbacks. The outcome is an algorithm that explores a much smaller search space and guarantees that every maximal cliquepartition is computed only once.The algorithm can be used in problems such as anti-unification with proximity relations or in resource allocation tasks when one looks for several alternative ways to allocate resources.Enumerating All Maximal Clique-Partitions has to be dealt with in a special way. Proximity relations (reflexive symmetric fuzzy binary relations) characterize the notion of 'being close' numerically. They become crisp once we fix the threshold from which on, the distance between the objects can be called 'close'. Symbolic constraint solving (for unification, matching, and anti-unification constraints) over proximity relations has been studied recently by various authors, e.g., [11,12,1,7,8]. The approaches can be characterized as class-based and block-based. Considering proximity relations as (weighted) undirected graphs, a proximity class of a vertex is its neighborhood (i.e., the set of vertices to which the current vertex is connected by an edge), while a proximity block is a clique. In the class-based approach to proximity constraint solving, two objects are considered proximal if one of them belongs to the proximity class of another. In the block-based approach, two objects are proximal if they belong to the same unique maximal proximity block. The block-based approach is one that is closely related to the subject of this paper. To compute a minimal complete set of generalizations of two first-order logic terms with this approach, one needs to consider all maximal clique-partitions of the graph induced by the proximity relation between constants and between function symbols. For instance, if a is close to both b and c, but b and c are not close to each other, then f (a, a) and f (b, c) have two minimal common generalizations: f (a, x) and f (x, a). In this example, the proximity graph would be ({a, b, c}, {(a, b), (a, c)}). It has two maximal clique partitions {{a, b}, {c}} and {{a, c}, {b}} that tell exactly which symbols should be considered the same. In the first case these are a and b, leading to the generalization f (a, x), and in the second case they are a and c, giving f (x, a). Also, in the block-based approach to approximate unification, one would need to maintain maximal clique-partitions of the proximity graph in order to detect that, e.g., f (x, x) and f (b, c) are not unifiable in the abovementioned proximity r...