diff --git a/src/undirected_graph.rs b/src/undirected_graph.rs
index cabcbd643c21f0091989fc44979b9cf0e2586c5d..127a48c31a6f171965c7dddb2d7483712f47bdac 100644
--- a/src/undirected_graph.rs
+++ b/src/undirected_graph.rs
@@ -1,4 +1,4 @@
-use std::collections::HashMap;
+use std::collections::{HashMap, HashSet};
 
 #[derive(Debug, Eq, Hash, PartialEq)]
 pub struct UndirectedGraph {
@@ -285,15 +285,15 @@ impl UndirectedGraph {
         return diff;
     }
 
-    pub fn contractions(&self, edge_orbit_reps: &Vec<usize>) -> Vec<UndirectedGraph> {
-        let mut contractions: Vec<UndirectedGraph> = vec![];
+    pub fn contractions(&self, edge_orbit_reps: &Vec<usize>) -> HashSet<UndirectedGraph> {
+        let mut contractions: HashSet<UndirectedGraph> = HashSet::new();
         for &edge_orbit_rep in edge_orbit_reps {
             let edge: (usize, usize) = self.edges[edge_orbit_rep];
             // TODO: Optimize the computation of new_edges.
             let mut new_edges: Vec<(usize, usize)> = self.edges.clone();
             // Remove edge.
             new_edges.remove(edge_orbit_rep);
-            for (a,b) in new_edges.iter_mut() {
+            for (a, b) in new_edges.iter_mut() {
                 // Remove vertex edge.1
                 if *a == edge.1 {
                     *a = edge.0;
@@ -313,10 +313,15 @@ impl UndirectedGraph {
                     *b = *b - 1;
                 }
             }
-            let mut unique_edges: std::collections::HashSet<(usize,usize)> = std::collections::HashSet::new();
-            let has_no_double_edges: bool = new_edges.iter().all(|new_edge| unique_edges.insert(*new_edge));
+            let mut unique_edges: HashSet<(usize, usize)> = HashSet::new();
+            let has_no_double_edges: bool = new_edges
+                .iter()
+                .all(|new_edge| unique_edges.insert(*new_edge));
             if has_no_double_edges {
-                contractions.push(UndirectedGraph::new(self.num_vertices - 1, new_edges));
+                let cg: UndirectedGraph = UndirectedGraph::new(self.num_vertices - 1, new_edges);
+                let (_normal_cg_sign, normal_cg, _normal_cg_orbits) = cg.normal_form();
+                // TODO: Also return vertex orbit data.
+                contractions.insert(normal_cg);
             }
         }
         return contractions;