JAL-1953 JAL-2852 added public "paintFile" method
[jalview.git] / forester / java / src / org / forester / surfacing / TestSurfacing.java
index 44c9115..72141d2 100644 (file)
@@ -22,7 +22,7 @@
 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
 //
 // Contact: phylosoft @ gmail . com
-// WWW: www.phylosoft.org/forester
+// WWW: https://sites.google.com/site/cmzmasek/home/software/forester
 
 package org.forester.surfacing;
 
@@ -42,7 +42,6 @@ import org.forester.evoinference.matrix.character.CharacterStateMatrix;
 import org.forester.evoinference.matrix.character.CharacterStateMatrix.BinaryStates;
 import org.forester.evoinference.matrix.character.CharacterStateMatrix.GainLossStates;
 import org.forester.io.parsers.HmmPfamOutputParser;
-import org.forester.io.parsers.nexus.PaupLogParser;
 import org.forester.io.parsers.nhx.NHXParser;
 import org.forester.phylogeny.Phylogeny;
 import org.forester.phylogeny.PhylogenyNode;
@@ -53,12 +52,10 @@ import org.forester.protein.BasicProtein;
 import org.forester.protein.BinaryDomainCombination;
 import org.forester.protein.BinaryDomainCombination.DomainCombinationType;
 import org.forester.protein.Domain;
-import org.forester.protein.DomainId;
 import org.forester.protein.Protein;
 import org.forester.protein.ProteinId;
 import org.forester.species.BasicSpecies;
 import org.forester.species.Species;
-import org.forester.test.Test;
 import org.forester.util.ForesterUtil;
 
 @SuppressWarnings( "unused")
@@ -70,50 +67,7 @@ public class TestSurfacing {
         return ( ( Math.abs( a - b ) ) < TestSurfacing.ZERO_DIFF );
     }
 
-    private static StringBuffer mapToStringBuffer( final Map<PhylogenyNode, CharacterStateMatrix.BinaryStates> map ) {
-        final StringBuffer sb = new StringBuffer();
-        for( final PhylogenyNode key : map.keySet() ) {
-            if ( !key.isExternal() ) {
-                sb.append( key.getName() );
-                sb.append( " : " );
-                sb.append( map.get( key ).toString() );
-                sb.append( ForesterUtil.getLineSeparator() );
-            }
-        }
-        return sb;
-    }
-
     public static boolean test( final File test_dir ) {
-        System.out.print( "  Domain id: " );
-        if ( !TestSurfacing.testDomainId() ) {
-            System.out.println( "failed." );
-            return false;
-        }
-        System.out.println( "OK." );
-        System.out.print( "  Protein id: " );
-        if ( !TestSurfacing.testProteinId() ) {
-            System.out.println( "failed." );
-            return false;
-        }
-        System.out.println( "OK." );
-        System.out.print( "  Species: " );
-        if ( !TestSurfacing.testSpecies() ) {
-            System.out.println( "failed." );
-            return false;
-        }
-        System.out.println( "OK." );
-        System.out.print( "  Basic domain: " );
-        if ( !TestSurfacing.testBasicDomain() ) {
-            System.out.println( "failed." );
-            return false;
-        }
-        System.out.println( "OK." );
-        System.out.print( "  Basic protein: " );
-        if ( !TestSurfacing.testBasicProtein() ) {
-            System.out.println( "failed." );
-            return false;
-        }
-        System.out.println( "OK." );
         System.out.print( "  Combinable domains: " );
         if ( !TestSurfacing.testCombinableDomains() ) {
             System.out.println( "failed." );
@@ -191,18 +145,6 @@ public class TestSurfacing {
             return false;
         }
         System.out.println( "OK." );
-        System.out.print( "  Overlap removal: " );
-        if ( !TestSurfacing.testOverlapRemoval() ) {
-            System.out.println( "failed." );
-            return false;
-        }
-        System.out.println( "OK." );
-        System.out.print( "  Engulfing overlap removal: " );
-        if ( !TestSurfacing.testEngulfingOverlapRemoval() ) {
-            System.out.println( "failed." );
-            return false;
-        }
-        System.out.println( "OK." );
         System.out.print( "  Binary domain combination: " );
         if ( !TestSurfacing.testBinaryDomainCombination() ) {
             System.out.println( "failed." );
@@ -233,12 +175,7 @@ public class TestSurfacing {
             return false;
         }
         System.out.println( "OK." );
-        System.out.print( "  Paup log parser: " );
-        if ( !TestSurfacing.testPaupLogParser( test_dir ) ) {
-            System.out.println( "failed." );
-            return false;
-        }
-        System.out.println( "OK." );
+       
         System.out.print( "  Binary state matrix to gain loss matrix: " );
         if ( !TestSurfacing.testBinaryStateMatrixToGainLossMatrix( test_dir ) ) {
             System.out.println( "failed." );
@@ -248,62 +185,17 @@ public class TestSurfacing {
         return true;
     }
 
-    private static boolean testBasicDomain() {
-        try {
-            final Domain pd = new BasicDomain( "id", 23, 25, ( short ) 1, ( short ) 4, 0.1, -12 );
-            if ( !pd.getDomainId().getId().equals( "id" ) ) {
-                return false;
-            }
-            if ( pd.getNumber() != 1 ) {
-                return false;
-            }
-            if ( pd.getTotalCount() != 4 ) {
-                return false;
-            }
-            if ( !pd.equals( new BasicDomain( "id", 22, 111, ( short ) 1, ( short ) 4, 0.2, -12 ) ) ) {
-                return false;
-            }
-            final Domain a1 = new BasicDomain( "a", 1, 10, ( short ) 1, ( short ) 4, 0.1, -12 );
-            final BasicDomain a1_copy = new BasicDomain( "a", 1, 10, ( short ) 1, ( short ) 4, 0.1, -12 );
-            final BasicDomain a1_equal = new BasicDomain( "a", 524, 743994, ( short ) 1, ( short ) 300, 3.0005, 230 );
-            final BasicDomain a2 = new BasicDomain( "a", 1, 10, ( short ) 2, ( short ) 4, 0.1, -12 );
-            final BasicDomain a3 = new BasicDomain( "A", 1, 10, ( short ) 1, ( short ) 4, 0.1, -12 );
-            if ( !a1.equals( a1 ) ) {
-                return false;
-            }
-            if ( !a1.equals( a1_copy ) ) {
-                return false;
-            }
-            if ( !a1.equals( a1_equal ) ) {
-                return false;
-            }
-            if ( !a1.equals( a2 ) ) {
-                return false;
-            }
-            if ( a1.equals( a3 ) ) {
-                return false;
-            }
-            if ( a1.compareTo( a1 ) != 0 ) {
-                return false;
-            }
-            if ( a1.compareTo( a1_copy ) != 0 ) {
-                return false;
-            }
-            if ( a1.compareTo( a1_equal ) != 0 ) {
-                return false;
-            }
-            if ( a1.compareTo( a2 ) != 0 ) {
-                return false;
-            }
-            if ( a1.compareTo( a3 ) != 0 ) {
-                return false;
+    private static StringBuffer mapToStringBuffer( final Map<PhylogenyNode, CharacterStateMatrix.BinaryStates> map ) {
+        final StringBuffer sb = new StringBuffer();
+        for( final PhylogenyNode key : map.keySet() ) {
+            if ( !key.isExternal() ) {
+                sb.append( key.getName() );
+                sb.append( " : " );
+                sb.append( map.get( key ).toString() );
+                sb.append( ForesterUtil.getLineSeparator() );
             }
         }
-        catch ( final Exception e ) {
-            e.printStackTrace( System.out );
-            return false;
-        }
-        return true;
+        return sb;
     }
 
     private static boolean testBasicDomainSimilarityCalculator() {
@@ -357,9 +249,6 @@ public class TestSurfacing {
             final Domain F = new BasicDomain( "F", 1, 2, ( short ) 1, ( short ) 1, 0.01, -12 );
             final Domain G = new BasicDomain( "G", 1, 2, ( short ) 1, ( short ) 1, 0.001, -12 );
             final Domain X = new BasicDomain( "X", 1, 2, ( short ) 1, ( short ) 1, 0.0001, -12 );
-            if ( !TestSurfacing.isEqual( X.getPerSequenceScore(), -12 ) ) {
-                return false;
-            }
             final Protein mouse_1 = new BasicProtein( "1", "mouse", 0 );
             final Protein rabbit_1 = new BasicProtein( "1", "rabbit", 0 );
             final Protein ciona_1 = new BasicProtein( "1", "ciona", 0 );
@@ -416,7 +305,8 @@ public class TestSurfacing {
                                                                            new BasicSpecies( "nemve" ) ) );
             final DomainSimilarityCalculator calc = new BasicDomainSimilarityCalculator( DomainSimilarity.DomainSimilaritySortField.DOMAIN_ID,
                                                                                          false,
-                                                                                         false );
+                                                                                         false,
+                                                                                         true );
             final SortedSet<DomainSimilarity> sims = calc
                     .calculateSimilarities( new CombinationsBasedPairwiseDomainSimilarityCalculator(),
                                             cdc_list,
@@ -424,7 +314,7 @@ public class TestSurfacing {
                                             true );
             final Iterator<DomainSimilarity> sims_it = sims.iterator();
             final DomainSimilarity sa = sims_it.next();
-            if ( !sa.getDomainId().getId().equals( "A" ) ) {
+            if ( !sa.getDomainId().equals( "A" ) ) {
                 return false;
             }
             if ( sa.getSpeciesData().size() != 4 ) {
@@ -442,8 +332,8 @@ public class TestSurfacing {
             if ( !sa.getSpecies().contains( new BasicSpecies( "rabbit" ) ) ) {
                 return false;
             }
-            if ( !TestSurfacing.isEqual( sa.getMeanSimilarityScore(),
-                                         ( 2.0 / 5 + 0 + 2.0 / 3 + 1.0 / 5 + 1.0 / 2 + 2.0 / 7 ) / 6 ) ) {
+            if ( !TestSurfacing.isEqual( sa.getMeanSimilarityScore(), ( ( 2.0 / 5 ) + 0 + ( 2.0 / 3 ) + ( 1.0 / 5 )
+                    + ( 1.0 / 2 ) + ( 2.0 / 7 ) ) / 6 ) ) {
                 return false;
             }
             if ( !TestSurfacing.isEqual( sa.getStandardDeviationOfSimilarityScore(), ( 0.23410788192183737 ) ) ) {
@@ -465,7 +355,7 @@ public class TestSurfacing {
                 return false;
             }
             final DomainSimilarity sb = sims_it.next();
-            if ( !sb.getDomainId().getId().equals( "B" ) ) {
+            if ( !sb.getDomainId().equals( "B" ) ) {
                 return false;
             }
             if ( sb.getSpeciesData().size() != 2 ) {
@@ -499,7 +389,7 @@ public class TestSurfacing {
                 return false;
             }
             final DomainSimilarity sc = sims_it.next();
-            if ( !sc.getDomainId().getId().equals( "C" ) ) {
+            if ( !sc.getDomainId().equals( "C" ) ) {
                 return false;
             }
             if ( sc.getSpeciesData().size() != 3 ) {
@@ -514,7 +404,7 @@ public class TestSurfacing {
             if ( !sc.getSpecies().contains( new BasicSpecies( "nemve" ) ) ) {
                 return false;
             }
-            if ( !TestSurfacing.isEqual( sc.getMeanSimilarityScore(), ( 2.0 / 5 + 2.0 / 3 + 1.0 / 2 ) / 3 ) ) {
+            if ( !TestSurfacing.isEqual( sc.getMeanSimilarityScore(), ( ( 2.0 / 5 ) + ( 2.0 / 3 ) + ( 1.0 / 2 ) ) / 3 ) ) {
                 return false;
             }
             if ( !TestSurfacing.isEqual( sc.getStandardDeviationOfSimilarityScore(), 0.13471506281091264 ) ) {
@@ -566,7 +456,8 @@ public class TestSurfacing {
                                                                             new BasicSpecies( "nemve" ) ) );
             final DomainSimilarityCalculator calc2 = new BasicDomainSimilarityCalculator( DomainSimilarity.DomainSimilaritySortField.DOMAIN_ID,
                                                                                           false,
-                                                                                          false );
+                                                                                          false,
+                                                                                          true );
             final SortedSet<DomainSimilarity> sims2 = calc2
                     .calculateSimilarities( new CombinationsBasedPairwiseDomainSimilarityCalculator(),
                                             cdc_list2,
@@ -574,7 +465,7 @@ public class TestSurfacing {
                                             true );
             final Iterator<DomainSimilarity> sims_it2 = sims2.iterator();
             final DomainSimilarity sa2 = sims_it2.next();
-            if ( !sa2.getDomainId().getId().equals( "A" ) ) {
+            if ( !sa2.getDomainId().equals( "A" ) ) {
                 return false;
             }
             if ( sa2.getSpeciesData().size() != 4 ) {
@@ -592,8 +483,8 @@ public class TestSurfacing {
             if ( !sa2.getSpeciesData().keySet().contains( new BasicSpecies( "rabbit" ) ) ) {
                 return false;
             }
-            if ( !TestSurfacing.isEqual( sa2.getMeanSimilarityScore(),
-                                         ( 2.0 / 5 + 0 + 2.0 / 3 + 1.0 / 6 + 1.0 / 2 + 2.0 / 8 ) / 6 ) ) {
+            if ( !TestSurfacing.isEqual( sa2.getMeanSimilarityScore(), ( ( 2.0 / 5 ) + 0 + ( 2.0 / 3 ) + ( 1.0 / 6 )
+                    + ( 1.0 / 2 ) + ( 2.0 / 8 ) ) / 6 ) ) {
                 return false;
             }
             if ( !TestSurfacing.isEqual( sa2.getStandardDeviationOfSimilarityScore(), ( 0.2404663678647683 ) ) ) {
@@ -653,7 +544,8 @@ public class TestSurfacing {
                                                                             new BasicSpecies( "nemve" ) ) );
             final DomainSimilarityCalculator calc3 = new BasicDomainSimilarityCalculator( DomainSimilarity.DomainSimilaritySortField.DOMAIN_ID,
                                                                                           false,
-                                                                                          false );
+                                                                                          false,
+                                                                                          true );
             final SortedSet<DomainSimilarity> sims3 = calc3
                     .calculateSimilarities( new CombinationsBasedPairwiseDomainSimilarityCalculator(),
                                             cdc_list3,
@@ -661,23 +553,23 @@ public class TestSurfacing {
                                             true );
             final Iterator<DomainSimilarity> sims_it3 = sims3.iterator();
             final DomainSimilarity sa3 = sims_it3.next();
-            if ( !sa3.getDomainId().getId().equals( "A" ) ) {
+            if ( !sa3.getDomainId().equals( "A" ) ) {
                 return false;
             }
-            final SpeciesSpecificDomainSimilariyData ssdsd = sa3.getSpeciesData().get( new BasicSpecies( "ciona" ) );
+            final SpeciesSpecificDcData ssdsd = sa3.getSpeciesData().get( new BasicSpecies( "ciona" ) );
             if ( ssdsd.getCombinableDomainIdToCountsMap().size() != 4 ) {
                 return false;
             }
-            if ( ssdsd.getNumberOfProteinsExhibitingCombinationWith( new DomainId( "B" ) ) != 2 ) {
+            if ( ssdsd.getNumberOfProteinsExhibitingCombinationWith( "B" ) != 2 ) {
                 return false;
             }
-            if ( ssdsd.getNumberOfProteinsExhibitingCombinationWith( new DomainId( "F" ) ) != 2 ) {
+            if ( ssdsd.getNumberOfProteinsExhibitingCombinationWith( "F" ) != 2 ) {
                 return false;
             }
-            if ( ssdsd.getNumberOfProteinsExhibitingCombinationWith( new DomainId( "G" ) ) != 2 ) {
+            if ( ssdsd.getNumberOfProteinsExhibitingCombinationWith( "G" ) != 2 ) {
                 return false;
             }
-            if ( ssdsd.getNumberOfProteinsExhibitingCombinationWith( new DomainId( "X" ) ) != 3 ) {
+            if ( ssdsd.getNumberOfProteinsExhibitingCombinationWith( "X" ) != 3 ) {
                 return false;
             }
             final List<GenomeWideCombinableDomains> cdc_list4 = new ArrayList<GenomeWideCombinableDomains>();
@@ -696,7 +588,8 @@ public class TestSurfacing {
                                                                             new BasicSpecies( "nemve" ) ) );
             final DomainSimilarityCalculator calc4 = new BasicDomainSimilarityCalculator( DomainSimilarity.DomainSimilaritySortField.DOMAIN_ID,
                                                                                           true,
-                                                                                          false );
+                                                                                          false,
+                                                                                          true );
             final SortedSet<DomainSimilarity> sims4 = calc4
                     .calculateSimilarities( new CombinationsBasedPairwiseDomainSimilarityCalculator(),
                                             cdc_list4,
@@ -704,46 +597,47 @@ public class TestSurfacing {
                                             true );
             final Iterator<DomainSimilarity> sims_it4 = sims4.iterator();
             final DomainSimilarity sa4 = sims_it4.next();
-            if ( !sa4.getDomainId().getId().equals( "A" ) ) {
+            if ( !sa4.getDomainId().equals( "A" ) ) {
                 return false;
             }
-            final SpeciesSpecificDomainSimilariyData ssdsd4 = sa4.getSpeciesData().get( new BasicSpecies( "ciona" ) );
+            final SpeciesSpecificDcData ssdsd4 = sa4.getSpeciesData().get( new BasicSpecies( "ciona" ) );
             if ( ssdsd4.getCombinableDomainIdToCountsMap().size() != 5 ) {
                 return false;
             }
-            if ( ssdsd4.getNumberOfProteinsExhibitingCombinationWith( new DomainId( "A" ) ) != 3 ) {
+            if ( ssdsd4.getNumberOfProteinsExhibitingCombinationWith( "A" ) != 3 ) {
                 return false;
             }
-            if ( ssdsd4.getNumberOfProteinsExhibitingCombinationWith( new DomainId( "B" ) ) != 2 ) {
+            if ( ssdsd4.getNumberOfProteinsExhibitingCombinationWith( "B" ) != 2 ) {
                 return false;
             }
-            if ( ssdsd4.getNumberOfProteinsExhibitingCombinationWith( new DomainId( "F" ) ) != 2 ) {
+            if ( ssdsd4.getNumberOfProteinsExhibitingCombinationWith( "F" ) != 2 ) {
                 return false;
             }
-            if ( ssdsd4.getNumberOfProteinsExhibitingCombinationWith( new DomainId( "G" ) ) != 2 ) {
+            if ( ssdsd4.getNumberOfProteinsExhibitingCombinationWith( "G" ) != 2 ) {
                 return false;
             }
-            if ( ssdsd4.getNumberOfProteinsExhibitingCombinationWith( new DomainId( "X" ) ) != 3 ) {
+            if ( ssdsd4.getNumberOfProteinsExhibitingCombinationWith( "X" ) != 3 ) {
                 return false;
             }
             final SortedSet<DomainSimilarity> sims4_d = calc4
                     .calculateSimilarities( new DomainCountsBasedPairwiseSimilarityCalculator(), cdc_list4, false, true );
             final Iterator<DomainSimilarity> sims_it4_d = sims4_d.iterator();
             final DomainSimilarity sa4_d = sims_it4_d.next();
-            if ( !sa4_d.getDomainId().getId().equals( "A" ) ) {
+            if ( !sa4_d.getDomainId().equals( "A" ) ) {
                 return false;
             }
             if ( sa4_d.getCombinableDomainIds( new BasicSpecies( "ciona" ) ).size() != 5 ) {
                 return false;
             }
-            if ( !TestSurfacing.isEqual( sa4_d.getMeanSimilarityScore(), ( 1 + 1 - 11.0 / 13 + 1 - 11.0 / 13 + 1 + 1
-                    + 1 - 11.0 / 13 ) / 6.0 ) ) {
+            if ( !TestSurfacing
+                    .isEqual( sa4_d.getMeanSimilarityScore(),
+                              ( ( ( ( ( ( 1 + 1 ) - ( 11.0 / 13 ) ) + 1 ) - ( 11.0 / 13 ) ) + 1 + 1 + 1 ) - ( 11.0 / 13 ) ) / 6.0 ) ) {
                 return false;
             }
             if ( !TestSurfacing.isEqual( sa4_d.getMaximalSimilarityScore(), 1.0 ) ) {
                 return false;
             }
-            if ( !TestSurfacing.isEqual( sa4_d.getMinimalSimilarityScore(), ( 1 - 11.0 / 13 ) ) ) {
+            if ( !TestSurfacing.isEqual( sa4_d.getMinimalSimilarityScore(), ( 1 - ( 11.0 / 13 ) ) ) ) {
                 return false;
             }
             if ( sa4_d.getN() != 6 ) {
@@ -756,35 +650,36 @@ public class TestSurfacing {
                                             true );
             final Iterator<DomainSimilarity> sims_it4_p = sims4_p.iterator();
             final DomainSimilarity sa4_p = sims_it4_p.next();
-            if ( !sa4_p.getDomainId().getId().equals( "A" ) ) {
+            if ( !sa4_p.getDomainId().equals( "A" ) ) {
                 return false;
             }
             if ( sa4_p.getCombinableDomainIds( new BasicSpecies( "ciona" ) ).size() != 5 ) {
                 return false;
             }
-            if ( !sa4_p.getCombinableDomainIds( new BasicSpecies( "ciona" ) ).contains( new DomainId( "A" ) ) ) {
+            if ( !sa4_p.getCombinableDomainIds( new BasicSpecies( "ciona" ) ).contains( "A" ) ) {
                 return false;
             }
-            if ( !sa4_p.getCombinableDomainIds( new BasicSpecies( "ciona" ) ).contains( new DomainId( "B" ) ) ) {
+            if ( !sa4_p.getCombinableDomainIds( new BasicSpecies( "ciona" ) ).contains( "B" ) ) {
                 return false;
             }
-            if ( !sa4_p.getCombinableDomainIds( new BasicSpecies( "ciona" ) ).contains( new DomainId( "F" ) ) ) {
+            if ( !sa4_p.getCombinableDomainIds( new BasicSpecies( "ciona" ) ).contains( "F" ) ) {
                 return false;
             }
-            if ( !sa4_p.getCombinableDomainIds( new BasicSpecies( "ciona" ) ).contains( new DomainId( "G" ) ) ) {
+            if ( !sa4_p.getCombinableDomainIds( new BasicSpecies( "ciona" ) ).contains( "G" ) ) {
                 return false;
             }
-            if ( !sa4_p.getCombinableDomainIds( new BasicSpecies( "ciona" ) ).contains( new DomainId( "X" ) ) ) {
+            if ( !sa4_p.getCombinableDomainIds( new BasicSpecies( "ciona" ) ).contains( "X" ) ) {
                 return false;
             }
-            if ( !TestSurfacing.isEqual( sa4_p.getMeanSimilarityScore(),
-                                         ( 1 + 1 - 2.0 / 4 + 1 - 2.0 / 4 + 1 + 1 + 1 - 2.0 / 4 ) / 6.0 ) ) {
+            if ( !TestSurfacing
+                    .isEqual( sa4_p.getMeanSimilarityScore(),
+                              ( ( ( ( ( ( 1 + 1 ) - ( 2.0 / 4 ) ) + 1 ) - ( 2.0 / 4 ) ) + 1 + 1 + 1 ) - ( 2.0 / 4 ) ) / 6.0 ) ) {
                 return false;
             }
             if ( !TestSurfacing.isEqual( sa4_p.getMaximalSimilarityScore(), 1 ) ) {
                 return false;
             }
-            if ( !TestSurfacing.isEqual( sa4_p.getMinimalSimilarityScore(), ( 1 - 2.0 / 4 ) ) ) {
+            if ( !TestSurfacing.isEqual( sa4_p.getMinimalSimilarityScore(), ( 1 - ( 2.0 / 4 ) ) ) ) {
                 return false;
             }
             if ( sa4_p.getN() != 6 ) {
@@ -813,52 +708,53 @@ public class TestSurfacing {
             if ( !sa5_d.getSpecies().last().equals( new BasicSpecies( "rabbit" ) ) ) {
                 return false;
             }
-            final SpeciesSpecificDomainSimilariyData ssdsd5 = sa5_d.getSpeciesData().get( new BasicSpecies( "ciona" ) );
+            final SpeciesSpecificDcData ssdsd5 = sa5_d.getSpeciesData().get( new BasicSpecies( "ciona" ) );
             if ( ssdsd5.getCombinableDomainIdToCountsMap().size() != 4 ) {
                 return false;
             }
-            if ( ssdsd5.getNumberOfProteinsExhibitingCombinationWith( new DomainId( "B" ) ) != 2 ) {
+            if ( ssdsd5.getNumberOfProteinsExhibitingCombinationWith( "B" ) != 2 ) {
                 return false;
             }
-            if ( ssdsd5.getNumberOfProteinsExhibitingCombinationWith( new DomainId( "F" ) ) != 2 ) {
+            if ( ssdsd5.getNumberOfProteinsExhibitingCombinationWith( "F" ) != 2 ) {
                 return false;
             }
-            if ( ssdsd5.getNumberOfProteinsExhibitingCombinationWith( new DomainId( "G" ) ) != 2 ) {
+            if ( ssdsd5.getNumberOfProteinsExhibitingCombinationWith( "G" ) != 2 ) {
                 return false;
             }
-            if ( ssdsd5.getNumberOfProteinsExhibitingCombinationWith( new DomainId( "X" ) ) != 3 ) {
+            if ( ssdsd5.getNumberOfProteinsExhibitingCombinationWith( "X" ) != 3 ) {
                 return false;
             }
-            if ( !sa5_d.getDomainId().getId().equals( "A" ) ) {
+            if ( !sa5_d.getDomainId().equals( "A" ) ) {
                 return false;
             }
             final Species ciona = new BasicSpecies( "ciona" );
             if ( sa5_d.getCombinableDomainIds( ciona ).size() != 4 ) {
                 return false;
             }
-            if ( sa5_d.getCombinableDomainIds( ciona ).contains( new DomainId( "A" ) ) ) {
+            if ( sa5_d.getCombinableDomainIds( ciona ).contains( "A" ) ) {
                 return false;
             }
-            if ( !sa5_d.getCombinableDomainIds( ciona ).contains( new DomainId( "B" ) ) ) {
+            if ( !sa5_d.getCombinableDomainIds( ciona ).contains( "B" ) ) {
                 return false;
             }
-            if ( !sa5_d.getCombinableDomainIds( ciona ).contains( new DomainId( "F" ) ) ) {
+            if ( !sa5_d.getCombinableDomainIds( ciona ).contains( "F" ) ) {
                 return false;
             }
-            if ( !sa5_d.getCombinableDomainIds( ciona ).contains( new DomainId( "G" ) ) ) {
+            if ( !sa5_d.getCombinableDomainIds( ciona ).contains( "G" ) ) {
                 return false;
             }
-            if ( !sa5_d.getCombinableDomainIds( ciona ).contains( new DomainId( "X" ) ) ) {
+            if ( !sa5_d.getCombinableDomainIds( ciona ).contains( "X" ) ) {
                 return false;
             }
-            if ( !TestSurfacing.isEqual( sa5_d.getMeanSimilarityScore(), ( 1 + 1 - 11.0 / 13 + 1 - 11.0 / 13 + 1 + 1
-                    + 1 - 11.0 / 13 ) / 6.0 ) ) {
+            if ( !TestSurfacing
+                    .isEqual( sa5_d.getMeanSimilarityScore(),
+                              ( ( ( ( ( ( 1 + 1 ) - ( 11.0 / 13 ) ) + 1 ) - ( 11.0 / 13 ) ) + 1 + 1 + 1 ) - ( 11.0 / 13 ) ) / 6.0 ) ) {
                 return false;
             }
             if ( !TestSurfacing.isEqual( sa5_d.getMaximalSimilarityScore(), 1.0 ) ) {
                 return false;
             }
-            if ( !TestSurfacing.isEqual( sa5_d.getMinimalSimilarityScore(), ( 1 - 11.0 / 13 ) ) ) {
+            if ( !TestSurfacing.isEqual( sa5_d.getMinimalSimilarityScore(), ( 1 - ( 11.0 / 13 ) ) ) ) {
                 return false;
             }
             if ( sa5_d.getN() != 6 ) {
@@ -880,35 +776,36 @@ public class TestSurfacing {
                                             true );
             final Iterator<DomainSimilarity> sims_it5_p = sims5_p.iterator();
             final DomainSimilarity sa5_p = sims_it5_p.next();
-            if ( !sa5_p.getDomainId().getId().equals( "A" ) ) {
+            if ( !sa5_p.getDomainId().equals( "A" ) ) {
                 return false;
             }
             if ( sa5_p.getCombinableDomainIds( ciona ).size() != 4 ) {
                 return false;
             }
-            if ( sa5_p.getCombinableDomainIds( ciona ).contains( new DomainId( "A" ) ) ) {
+            if ( sa5_p.getCombinableDomainIds( ciona ).contains( "A" ) ) {
                 return false;
             }
-            if ( !sa5_p.getCombinableDomainIds( ciona ).contains( new DomainId( "B" ) ) ) {
+            if ( !sa5_p.getCombinableDomainIds( ciona ).contains( "B" ) ) {
                 return false;
             }
-            if ( !sa5_p.getCombinableDomainIds( ciona ).contains( new DomainId( "F" ) ) ) {
+            if ( !sa5_p.getCombinableDomainIds( ciona ).contains( "F" ) ) {
                 return false;
             }
-            if ( !sa5_p.getCombinableDomainIds( ciona ).contains( new DomainId( "G" ) ) ) {
+            if ( !sa5_p.getCombinableDomainIds( ciona ).contains( "G" ) ) {
                 return false;
             }
-            if ( !sa5_p.getCombinableDomainIds( ciona ).contains( new DomainId( "X" ) ) ) {
+            if ( !sa5_p.getCombinableDomainIds( ciona ).contains( "X" ) ) {
                 return false;
             }
-            if ( !TestSurfacing.isEqual( sa5_p.getMeanSimilarityScore(),
-                                         ( 1 + 1 - 2.0 / 4 + 1 - 2.0 / 4 + 1 + 1 + 1 - 2.0 / 4 ) / 6.0 ) ) {
+            if ( !TestSurfacing
+                    .isEqual( sa5_p.getMeanSimilarityScore(),
+                              ( ( ( ( ( ( 1 + 1 ) - ( 2.0 / 4 ) ) + 1 ) - ( 2.0 / 4 ) ) + 1 + 1 + 1 ) - ( 2.0 / 4 ) ) / 6.0 ) ) {
                 return false;
             }
             if ( !TestSurfacing.isEqual( sa5_p.getMaximalSimilarityScore(), 1 ) ) {
                 return false;
             }
-            if ( !TestSurfacing.isEqual( sa5_p.getMinimalSimilarityScore(), ( 1 - 2.0 / 4 ) ) ) {
+            if ( !TestSurfacing.isEqual( sa5_p.getMinimalSimilarityScore(), ( 1 - ( 2.0 / 4 ) ) ) ) {
                 return false;
             }
             if ( sa5_p.getN() != 6 ) {
@@ -946,52 +843,53 @@ public class TestSurfacing {
             if ( !sa6_d.getSpecies().last().equals( new BasicSpecies( "rabbit" ) ) ) {
                 return false;
             }
-            final SpeciesSpecificDomainSimilariyData ssdsd6 = sa6_d.getSpeciesData().get( new BasicSpecies( "ciona" ) );
+            final SpeciesSpecificDcData ssdsd6 = sa6_d.getSpeciesData().get( new BasicSpecies( "ciona" ) );
             if ( ssdsd6.getCombinableDomainIdToCountsMap().size() != 5 ) {
                 return false;
             }
-            if ( ssdsd6.getNumberOfProteinsExhibitingCombinationWith( new DomainId( "B" ) ) != 2 ) {
+            if ( ssdsd6.getNumberOfProteinsExhibitingCombinationWith( "B" ) != 2 ) {
                 return false;
             }
-            if ( ssdsd6.getNumberOfProteinsExhibitingCombinationWith( new DomainId( "F" ) ) != 2 ) {
+            if ( ssdsd6.getNumberOfProteinsExhibitingCombinationWith( "F" ) != 2 ) {
                 return false;
             }
-            if ( ssdsd6.getNumberOfProteinsExhibitingCombinationWith( new DomainId( "G" ) ) != 2 ) {
+            if ( ssdsd6.getNumberOfProteinsExhibitingCombinationWith( "G" ) != 2 ) {
                 return false;
             }
-            if ( ssdsd6.getNumberOfProteinsExhibitingCombinationWith( new DomainId( "X" ) ) != 3 ) {
+            if ( ssdsd6.getNumberOfProteinsExhibitingCombinationWith( "X" ) != 3 ) {
                 return false;
             }
-            if ( !sa5_d.getDomainId().getId().equals( "A" ) ) {
+            if ( !sa5_d.getDomainId().equals( "A" ) ) {
                 return false;
             }
             final Species ciona6 = new BasicSpecies( "ciona" );
             if ( sa6_d.getCombinableDomainIds( ciona6 ).size() != 5 ) {
                 return false;
             }
-            if ( !sa6_d.getCombinableDomainIds( ciona6 ).contains( new DomainId( "A" ) ) ) {
+            if ( !sa6_d.getCombinableDomainIds( ciona6 ).contains( "A" ) ) {
                 return false;
             }
-            if ( !sa6_d.getCombinableDomainIds( ciona6 ).contains( new DomainId( "B" ) ) ) {
+            if ( !sa6_d.getCombinableDomainIds( ciona6 ).contains( "B" ) ) {
                 return false;
             }
-            if ( !sa6_d.getCombinableDomainIds( ciona6 ).contains( new DomainId( "F" ) ) ) {
+            if ( !sa6_d.getCombinableDomainIds( ciona6 ).contains( "F" ) ) {
                 return false;
             }
-            if ( !sa6_d.getCombinableDomainIds( ciona6 ).contains( new DomainId( "G" ) ) ) {
+            if ( !sa6_d.getCombinableDomainIds( ciona6 ).contains( "G" ) ) {
                 return false;
             }
-            if ( !sa6_d.getCombinableDomainIds( ciona6 ).contains( new DomainId( "X" ) ) ) {
+            if ( !sa6_d.getCombinableDomainIds( ciona6 ).contains( "X" ) ) {
                 return false;
             }
-            if ( !TestSurfacing.isEqual( sa6_d.getMeanSimilarityScore(), ( 1 + 1 - 11.0 / 13 + 1 - 11.0 / 13 + 1 + 1
-                    + 1 - 11.0 / 13 ) / 6.0 ) ) {
+            if ( !TestSurfacing
+                    .isEqual( sa6_d.getMeanSimilarityScore(),
+                              ( ( ( ( ( ( 1 + 1 ) - ( 11.0 / 13 ) ) + 1 ) - ( 11.0 / 13 ) ) + 1 + 1 + 1 ) - ( 11.0 / 13 ) ) / 6.0 ) ) {
                 return false;
             }
             if ( !TestSurfacing.isEqual( sa6_d.getMaximalSimilarityScore(), 1.0 ) ) {
                 return false;
             }
-            if ( !TestSurfacing.isEqual( sa6_d.getMinimalSimilarityScore(), ( 1 - 11.0 / 13 ) ) ) {
+            if ( !TestSurfacing.isEqual( sa6_d.getMinimalSimilarityScore(), ( 1 - ( 11.0 / 13 ) ) ) ) {
                 return false;
             }
             if ( sa6_d.getN() != 6 ) {
@@ -1013,35 +911,36 @@ public class TestSurfacing {
                                             true );
             final Iterator<DomainSimilarity> sims_it6_p = sims6_p.iterator();
             final DomainSimilarity sa6_p = sims_it6_p.next();
-            if ( !sa6_p.getDomainId().getId().equals( "A" ) ) {
+            if ( !sa6_p.getDomainId().equals( "A" ) ) {
                 return false;
             }
             if ( sa6_p.getCombinableDomainIds( ciona ).size() != 5 ) {
                 return false;
             }
-            if ( !sa6_p.getCombinableDomainIds( ciona ).contains( new DomainId( "A" ) ) ) {
+            if ( !sa6_p.getCombinableDomainIds( ciona ).contains( "A" ) ) {
                 return false;
             }
-            if ( !sa6_p.getCombinableDomainIds( ciona ).contains( new DomainId( "B" ) ) ) {
+            if ( !sa6_p.getCombinableDomainIds( ciona ).contains( "B" ) ) {
                 return false;
             }
-            if ( !sa6_p.getCombinableDomainIds( ciona ).contains( new DomainId( "F" ) ) ) {
+            if ( !sa6_p.getCombinableDomainIds( ciona ).contains( "F" ) ) {
                 return false;
             }
-            if ( !sa6_p.getCombinableDomainIds( ciona ).contains( new DomainId( "G" ) ) ) {
+            if ( !sa6_p.getCombinableDomainIds( ciona ).contains( "G" ) ) {
                 return false;
             }
-            if ( !sa6_p.getCombinableDomainIds( ciona ).contains( new DomainId( "X" ) ) ) {
+            if ( !sa6_p.getCombinableDomainIds( ciona ).contains( "X" ) ) {
                 return false;
             }
-            if ( !TestSurfacing.isEqual( sa6_p.getMeanSimilarityScore(),
-                                         ( 1 + 1 - 2.0 / 4 + 1 - 2.0 / 4 + 1 + 1 + 1 - 2.0 / 4 ) / 6.0 ) ) {
+            if ( !TestSurfacing
+                    .isEqual( sa6_p.getMeanSimilarityScore(),
+                              ( ( ( ( ( ( 1 + 1 ) - ( 2.0 / 4 ) ) + 1 ) - ( 2.0 / 4 ) ) + 1 + 1 + 1 ) - ( 2.0 / 4 ) ) / 6.0 ) ) {
                 return false;
             }
             if ( !TestSurfacing.isEqual( sa6_p.getMaximalSimilarityScore(), 1 ) ) {
                 return false;
             }
-            if ( !TestSurfacing.isEqual( sa6_p.getMinimalSimilarityScore(), ( 1 - 2.0 / 4 ) ) ) {
+            if ( !TestSurfacing.isEqual( sa6_p.getMinimalSimilarityScore(), ( 1 - ( 2.0 / 4 ) ) ) ) {
                 return false;
             }
             if ( sa6_p.getN() != 6 ) {
@@ -1073,9 +972,6 @@ public class TestSurfacing {
             final Domain F = new BasicDomain( "F", 1, 2, ( short ) 1, ( short ) 1, 0.01, -12 );
             final Domain G = new BasicDomain( "G", 1, 2, ( short ) 1, ( short ) 1, 0.001, -12 );
             final Domain X = new BasicDomain( "X", 1, 2, ( short ) 1, ( short ) 1, 0.0001, -12 );
-            if ( !TestSurfacing.isEqual( X.getPerSequenceScore(), -12 ) ) {
-                return false;
-            }
             final Protein mouse_1 = new BasicProtein( "1", "mouse", 0 );
             final Protein rabbit_1 = new BasicProtein( "1", "rabbit", 0 );
             final Protein ciona_1 = new BasicProtein( "1", "ciona", 0 );
@@ -1121,7 +1017,8 @@ public class TestSurfacing {
                                                                            new BasicSpecies( "nemve" ) ) );
             final DomainSimilarityCalculator calc = new BasicDomainSimilarityCalculator( DomainSimilarity.DomainSimilaritySortField.DOMAIN_ID,
                                                                                          false,
-                                                                                         false );
+                                                                                         false,
+                                                                                         true );
             final SortedSet<DomainSimilarity> sims = calc
                     .calculateSimilarities( new CombinationsBasedPairwiseDomainSimilarityCalculator(),
                                             cdc_list,
@@ -1129,7 +1026,7 @@ public class TestSurfacing {
                                             false );
             final Iterator<DomainSimilarity> sims_it = sims.iterator();
             final DomainSimilarity sa = sims_it.next();
-            if ( !sa.getDomainId().getId().equals( "A" ) ) {
+            if ( !sa.getDomainId().equals( "A" ) ) {
                 return false;
             }
             if ( sa.getSpeciesData().size() != 1 ) {
@@ -1160,7 +1057,7 @@ public class TestSurfacing {
                 return false;
             }
             final DomainSimilarity sb = sims_it.next();
-            if ( !sb.getDomainId().getId().equals( "B" ) ) {
+            if ( !sb.getDomainId().equals( "B" ) ) {
                 return false;
             }
             if ( sb.getSpeciesData().size() != 1 ) {
@@ -1176,7 +1073,7 @@ public class TestSurfacing {
                                             true );
             final Iterator<DomainSimilarity> sims_it2 = sims2.iterator();
             final DomainSimilarity sa2 = sims_it2.next();
-            if ( !sa2.getDomainId().getId().equals( "D" ) ) {
+            if ( !sa2.getDomainId().equals( "D" ) ) {
                 return false;
             }
             if ( sa2.getSpeciesData().size() != 2 ) {
@@ -1229,7 +1126,8 @@ public class TestSurfacing {
                                                                            new BasicSpecies( "nemve" ) ) );
             final DomainSimilarityCalculator calc = new BasicDomainSimilarityCalculator( DomainSimilarity.DomainSimilaritySortField.DOMAIN_ID,
                                                                                          false,
-                                                                                         false );
+                                                                                         false,
+                                                                                         true );
             final SortedSet<DomainSimilarity> sims = calc
                     .calculateSimilarities( new CombinationsBasedPairwiseDomainSimilarityCalculator(),
                                             cdc_list,
@@ -1240,7 +1138,7 @@ public class TestSurfacing {
             }
             final Iterator<DomainSimilarity> sims_it = sims.iterator();
             final DomainSimilarity sa = sims_it.next();
-            if ( !sa.getDomainId().getId().equals( "A" ) ) {
+            if ( !sa.getDomainId().equals( "A" ) ) {
                 return false;
             }
             if ( sa.getSpeciesData().size() != 4 ) {
@@ -1316,292 +1214,18 @@ public class TestSurfacing {
         return true;
     }
 
-    private static boolean testBasicProtein() {
-        try {
-            // A0  A10  B15  A20  B25  A30  B35  B40  C50  A60  C70  D80
-            final Domain A0 = new BasicDomain( "A", 0, 25, ( short ) 1, ( short ) 4, 0.1, -12 );
-            final Domain A10 = new BasicDomain( "A", 10, 11, ( short ) 1, ( short ) 4, 0.1, -12 );
-            final Domain B15 = new BasicDomain( "B", 11, 16, ( short ) 1, ( short ) 4, 0.1, -12 );
-            final Domain A20 = new BasicDomain( "A", 20, 100, ( short ) 1, ( short ) 4, 0.1, -12 );
-            final Domain B25 = new BasicDomain( "B", 25, 26, ( short ) 1, ( short ) 4, 0.1, -12 );
-            final Domain A30 = new BasicDomain( "A", 30, 31, ( short ) 1, ( short ) 4, 0.1, -12 );
-            final Domain B35 = new BasicDomain( "B", 31, 40, ( short ) 1, ( short ) 4, 0.1, -12 );
-            final Domain B40 = new BasicDomain( "B", 40, 600, ( short ) 1, ( short ) 4, 0.1, -12 );
-            final Domain C50 = new BasicDomain( "C", 50, 59, ( short ) 1, ( short ) 4, 0.1, -12 );
-            final Domain A60 = new BasicDomain( "A", 60, 395, ( short ) 1, ( short ) 4, 0.1, -12 );
-            final Domain C70 = new BasicDomain( "C", 70, 71, ( short ) 1, ( short ) 4, 0.1, -12 );
-            final Domain D80 = new BasicDomain( "D", 80, 81, ( short ) 1, ( short ) 4, 0.1, -12 );
-            final BasicProtein p = new BasicProtein( "p", "owl", 0 );
-            p.addProteinDomain( B15 );
-            p.addProteinDomain( C50 );
-            p.addProteinDomain( A60 );
-            p.addProteinDomain( A30 );
-            p.addProteinDomain( C70 );
-            p.addProteinDomain( B35 );
-            p.addProteinDomain( B40 );
-            p.addProteinDomain( A0 );
-            p.addProteinDomain( A10 );
-            p.addProteinDomain( A20 );
-            p.addProteinDomain( B25 );
-            p.addProteinDomain( D80 );
-            List<DomainId> domains_ids = new ArrayList<DomainId>();
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "C" ) );
-            if ( !p.contains( domains_ids, false ) ) {
-                return false;
-            }
-            if ( !p.contains( domains_ids, true ) ) {
-                return false;
-            }
-            domains_ids.add( new DomainId( "X" ) );
-            if ( p.contains( domains_ids, false ) ) {
-                return false;
-            }
-            if ( p.contains( domains_ids, true ) ) {
-                return false;
-            }
-            domains_ids = new ArrayList<DomainId>();
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "C" ) );
-            domains_ids.add( new DomainId( "D" ) );
-            if ( !p.contains( domains_ids, false ) ) {
-                return false;
-            }
-            if ( !p.contains( domains_ids, true ) ) {
-                return false;
-            }
-            domains_ids = new ArrayList<DomainId>();
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "D" ) );
-            domains_ids.add( new DomainId( "C" ) );
-            if ( !p.contains( domains_ids, false ) ) {
-                return false;
-            }
-            if ( p.contains( domains_ids, true ) ) {
-                return false;
-            }
-            domains_ids = new ArrayList<DomainId>();
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            if ( !p.contains( domains_ids, false ) ) {
-                return false;
-            }
-            if ( !p.contains( domains_ids, true ) ) {
-                return false;
-            }
-            domains_ids = new ArrayList<DomainId>();
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            if ( !p.contains( domains_ids, false ) ) {
-                return false;
-            }
-            if ( !p.contains( domains_ids, true ) ) {
-                return false;
-            }
-            domains_ids = new ArrayList<DomainId>();
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            if ( !p.contains( domains_ids, false ) ) {
-                return false;
-            }
-            if ( !p.contains( domains_ids, true ) ) {
-                return false;
-            }
-            domains_ids = new ArrayList<DomainId>();
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            if ( !p.contains( domains_ids, false ) ) {
-                return false;
-            }
-            if ( p.contains( domains_ids, true ) ) {
-                return false;
-            }
-            domains_ids = new ArrayList<DomainId>();
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "C" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "C" ) );
-            domains_ids.add( new DomainId( "D" ) );
-            if ( !p.contains( domains_ids, false ) ) {
-                return false;
-            }
-            if ( !p.contains( domains_ids, true ) ) {
-                return false;
-            }
-            domains_ids = new ArrayList<DomainId>();
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "C" ) );
-            domains_ids.add( new DomainId( "D" ) );
-            if ( !p.contains( domains_ids, false ) ) {
-                return false;
-            }
-            if ( !p.contains( domains_ids, true ) ) {
-                return false;
-            }
-            domains_ids = new ArrayList<DomainId>();
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "C" ) );
-            domains_ids.add( new DomainId( "C" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "C" ) );
-            domains_ids.add( new DomainId( "D" ) );
-            if ( !p.contains( domains_ids, false ) ) {
-                return false;
-            }
-            if ( p.contains( domains_ids, true ) ) {
-                return false;
-            }
-            domains_ids = new ArrayList<DomainId>();
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "C" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "C" ) );
-            domains_ids.add( new DomainId( "D" ) );
-            if ( !p.contains( domains_ids, false ) ) {
-                return false;
-            }
-            if ( p.contains( domains_ids, true ) ) {
-                return false;
-            }
-            domains_ids = new ArrayList<DomainId>();
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "D" ) );
-            if ( !p.contains( domains_ids, false ) ) {
-                return false;
-            }
-            if ( !p.contains( domains_ids, true ) ) {
-                return false;
-            }
-            domains_ids = new ArrayList<DomainId>();
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "C" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "C" ) );
-            domains_ids.add( new DomainId( "D" ) );
-            domains_ids.add( new DomainId( "X" ) );
-            if ( p.contains( domains_ids, false ) ) {
-                return false;
-            }
-            if ( p.contains( domains_ids, true ) ) {
-                return false;
-            }
-            domains_ids = new ArrayList<DomainId>();
-            domains_ids.add( new DomainId( "X" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "C" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "C" ) );
-            domains_ids.add( new DomainId( "D" ) );
-            if ( p.contains( domains_ids, false ) ) {
-                return false;
-            }
-            if ( p.contains( domains_ids, true ) ) {
-                return false;
-            }
-            domains_ids = new ArrayList<DomainId>();
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "B" ) );
-            domains_ids.add( new DomainId( "C" ) );
-            domains_ids.add( new DomainId( "A" ) );
-            domains_ids.add( new DomainId( "C" ) );
-            domains_ids.add( new DomainId( "D" ) );
-            if ( !p.contains( domains_ids, false ) ) {
-                return false;
-            }
-            if ( p.contains( domains_ids, true ) ) {
-                return false;
-            }
-        }
-        catch ( final Exception e ) {
-            e.printStackTrace( System.out );
-            return false;
-        }
-        return true;
-    }
-
     private static boolean testBinaryDomainCombination() {
         try {
-            final BasicBinaryDomainCombination s0 = new BasicBinaryDomainCombination( "a", "a" );
-            final BasicBinaryDomainCombination s1 = new BasicBinaryDomainCombination( "b", "a" );
-            final BasicBinaryDomainCombination s2 = new BasicBinaryDomainCombination( "a", "b" );
-            final BasicBinaryDomainCombination s3 = new BasicBinaryDomainCombination( "B", "A" );
-            final BasicBinaryDomainCombination s4 = new BasicBinaryDomainCombination( "A", "B" );
-            final BasicBinaryDomainCombination s5 = new BasicBinaryDomainCombination( "c", "a" );
-            final BasicBinaryDomainCombination s6 = new BasicBinaryDomainCombination( "b", "c" );
-            final BasicBinaryDomainCombination s7 = new BasicBinaryDomainCombination( "d", "a" );
-            final BasicBinaryDomainCombination s8 = new BasicBinaryDomainCombination( "b", "d" );
-            final BinaryDomainCombination s9 = BasicBinaryDomainCombination.createInstance( " z-z=a-aa " );
+            final BasicBinaryDomainCombination s0 = BasicBinaryDomainCombination.obtainInstance( "a", "a" );
+            final BasicBinaryDomainCombination s1 = BasicBinaryDomainCombination.obtainInstance( "b", "a" );
+            final BasicBinaryDomainCombination s2 = BasicBinaryDomainCombination.obtainInstance( "a", "b" );
+            final BasicBinaryDomainCombination s3 = BasicBinaryDomainCombination.obtainInstance( "B", "A" );
+            final BasicBinaryDomainCombination s4 = BasicBinaryDomainCombination.obtainInstance( "A", "B" );
+            final BasicBinaryDomainCombination s5 = BasicBinaryDomainCombination.obtainInstance( "c", "a" );
+            final BasicBinaryDomainCombination s6 = BasicBinaryDomainCombination.obtainInstance( "b", "c" );
+            final BasicBinaryDomainCombination s7 = BasicBinaryDomainCombination.obtainInstance( "d", "a" );
+            final BasicBinaryDomainCombination s8 = BasicBinaryDomainCombination.obtainInstance( "b", "d" );
+            final BinaryDomainCombination s9 = BasicBinaryDomainCombination.obtainInstance( "z-z=a-aa" );
             if ( !s9.toString().equals( "a-aa=z-z" ) ) {
                 System.out.println( s9.toString() );
                 return false;
@@ -1633,23 +1257,24 @@ public class TestSurfacing {
             final SortedSet<BasicBinaryDomainCombination> sorted = new TreeSet<BasicBinaryDomainCombination>();
             sorted.add( s0 );
             sorted.add( s1 );
-            sorted.add( s2 );
+            sorted.add( s2 );//
             sorted.add( s3 );
-            sorted.add( s3 );
-            sorted.add( s3 );
-            sorted.add( s4 );
+            sorted.add( s3 );//
+            sorted.add( s3 );//
+            sorted.add( s4 );//
             sorted.add( s5 );
             sorted.add( s6 );
             sorted.add( s7 );
-            sorted.add( s7 );
+            sorted.add( s7 );//
             sorted.add( s8 );
-            if ( sorted.size() != 6 ) {
+            if ( sorted.size() != 7 ) {
+                System.out.println( sorted.size() );
                 return false;
             }
-            final DirectedBinaryDomainCombination aa = new DirectedBinaryDomainCombination( "a", "a" );
-            final DirectedBinaryDomainCombination ba = new DirectedBinaryDomainCombination( "b", "a" );
-            final DirectedBinaryDomainCombination ab = new DirectedBinaryDomainCombination( "a", "b" );
-            final DirectedBinaryDomainCombination bb = new DirectedBinaryDomainCombination( "b", "b" );
+            final DirectedBinaryDomainCombination aa = DirectedBinaryDomainCombination.obtainInstance( "a", "a" );
+            final DirectedBinaryDomainCombination ba = DirectedBinaryDomainCombination.obtainInstance( "b", "a" );
+            final DirectedBinaryDomainCombination ab = DirectedBinaryDomainCombination.obtainInstance( "a", "b" );
+            final DirectedBinaryDomainCombination bb = DirectedBinaryDomainCombination.obtainInstance( "b", "b" );
             if ( !aa.equals( aa ) ) {
                 return false;
             }
@@ -1684,7 +1309,7 @@ public class TestSurfacing {
         final BinaryStates O = BinaryStates.ABSENT;
         try {
             final CharacterStateMatrix<BinaryStates> binary_states_matrix_0 = new BasicCharacterStateMatrix<BinaryStates>( 7,
-                                                                                                                           6 );
+                    6 );
             binary_states_matrix_0.setIdentifier( 0, "A" );
             binary_states_matrix_0.setIdentifier( 1, "B" );
             binary_states_matrix_0.setIdentifier( 2, "C" );
@@ -1839,11 +1464,11 @@ public class TestSurfacing {
             if ( cd0.toBinaryDomainCombinations().size() != 3 ) {
                 return false;
             }
-            final BasicBinaryDomainCombination s0 = new BasicBinaryDomainCombination( "key0", "a" );
-            final BasicBinaryDomainCombination s1 = new BasicBinaryDomainCombination( "b", "key0" );
-            final BasicBinaryDomainCombination s2 = new BasicBinaryDomainCombination( "key0", "c" );
-            final BasicBinaryDomainCombination s3 = new BasicBinaryDomainCombination( "key0", "cc" );
-            final BasicBinaryDomainCombination s4 = new BasicBinaryDomainCombination( "c", "key0" );
+            final BasicBinaryDomainCombination s0 = BasicBinaryDomainCombination.obtainInstance( "key0", "a" );
+            final BasicBinaryDomainCombination s1 = BasicBinaryDomainCombination.obtainInstance( "b", "key0" );
+            final BasicBinaryDomainCombination s2 = BasicBinaryDomainCombination.obtainInstance( "key0", "c" );
+            final BasicBinaryDomainCombination s3 = BasicBinaryDomainCombination.obtainInstance( "key0", "cc" );
+            final BasicBinaryDomainCombination s4 = BasicBinaryDomainCombination.obtainInstance( "c", "key0" );
             if ( !cd0.toBinaryDomainCombinations().contains( s0 ) ) {
                 return false;
             }
@@ -1889,7 +1514,7 @@ public class TestSurfacing {
             if ( cd1.toBinaryDomainCombinations().size() != 4 ) {
                 return false;
             }
-            final BasicBinaryDomainCombination kk = new BasicBinaryDomainCombination( "key1", "key1" );
+            final BasicBinaryDomainCombination kk = BasicBinaryDomainCombination.obtainInstance( "key1", "key1" );
             if ( !cd1.toBinaryDomainCombinations().contains( kk ) ) {
                 return false;
             }
@@ -1996,7 +1621,7 @@ public class TestSurfacing {
             two.setKeyDomainCount( 3 );
             final PairwiseDomainSimilarityCalculator calc = new DomainCountsBasedPairwiseSimilarityCalculator();
             PairwiseDomainSimilarity s1 = calc.calculateSimilarity( one, two );
-            if ( !TestSurfacing.isEqual( s1.getSimilarityScore(), 1.0 - ( 3 - 2.0 ) / ( 2 + 3 ) ) ) {
+            if ( !TestSurfacing.isEqual( s1.getSimilarityScore(), 1.0 - ( ( 3 - 2.0 ) / ( 2 + 3 ) ) ) ) {
                 return false;
             }
             if ( s1.getDifferenceInCounts() != ( 2 - 3 ) ) {
@@ -2014,7 +1639,7 @@ public class TestSurfacing {
             one.setKeyDomainCount( 1 );
             two.setKeyDomainCount( 1000 );
             s1 = calc.calculateSimilarity( one, two );
-            if ( !TestSurfacing.isEqual( s1.getSimilarityScore(), 1.0 - 999.0 / 1001 ) ) {
+            if ( !TestSurfacing.isEqual( s1.getSimilarityScore(), 1.0 - ( 999.0 / 1001 ) ) ) {
                 return false;
             }
             if ( s1.getDifferenceInCounts() != ( 1 - 1000 ) ) {
@@ -2074,15 +1699,15 @@ public class TestSurfacing {
             if ( cd0.toBinaryDomainCombinations().size() != 3 ) {
                 return false;
             }
-            final BinaryDomainCombination s0 = new DirectedBinaryDomainCombination( "key0", "a" );
-            final BinaryDomainCombination s1 = new DirectedBinaryDomainCombination( "b", "key0" );
-            final BinaryDomainCombination s2 = new DirectedBinaryDomainCombination( "key0", "c" );
-            final BinaryDomainCombination s3 = new DirectedBinaryDomainCombination( "key0", "cc" );
-            final BinaryDomainCombination s4 = new DirectedBinaryDomainCombination( "a", "b" );
-            final BinaryDomainCombination s5 = new DirectedBinaryDomainCombination( "b", "a" );
-            final BinaryDomainCombination s6 = new DirectedBinaryDomainCombination( "key0", "b" );
-            final BinaryDomainCombination s7 = new DirectedBinaryDomainCombination( "a", "key0" );
-            final BinaryDomainCombination s8 = new DirectedBinaryDomainCombination( "c", "key0" );
+            final BinaryDomainCombination s0 = DirectedBinaryDomainCombination.obtainInstance( "key0", "a" );
+            final BinaryDomainCombination s1 = DirectedBinaryDomainCombination.obtainInstance( "b", "key0" );
+            final BinaryDomainCombination s2 = DirectedBinaryDomainCombination.obtainInstance( "key0", "c" );
+            final BinaryDomainCombination s3 = DirectedBinaryDomainCombination.obtainInstance( "key0", "cc" );
+            final BinaryDomainCombination s4 = DirectedBinaryDomainCombination.obtainInstance( "a", "b" );
+            final BinaryDomainCombination s5 = DirectedBinaryDomainCombination.obtainInstance( "b", "a" );
+            final BinaryDomainCombination s6 = DirectedBinaryDomainCombination.obtainInstance( "key0", "b" );
+            final BinaryDomainCombination s7 = DirectedBinaryDomainCombination.obtainInstance( "a", "key0" );
+            final BinaryDomainCombination s8 = DirectedBinaryDomainCombination.obtainInstance( "c", "key0" );
             if ( !cd0.toBinaryDomainCombinations().contains( s0 ) ) {
                 return false;
             }
@@ -2140,7 +1765,7 @@ public class TestSurfacing {
             if ( cd1.toBinaryDomainCombinations().size() != 4 ) {
                 return false;
             }
-            final BinaryDomainCombination kk = new DirectedBinaryDomainCombination( "key1", "key1" );
+            final BinaryDomainCombination kk = DirectedBinaryDomainCombination.obtainInstance( "key1", "key1" );
             if ( !cd1.toBinaryDomainCombinations().contains( kk ) ) {
                 return false;
             }
@@ -2189,85 +1814,112 @@ public class TestSurfacing {
             list_1.add( five_1 );
             final GenomeWideCombinableDomains gwcd_1 = BasicGenomeWideCombinableDomains
                     .createInstance( list_1, false, new BasicSpecies( "1" ), DomainCombinationType.DIRECTED );
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "A", "B" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "A",
+                    "B" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "B", "A" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations()
+                    .contains( DirectedBinaryDomainCombination.obtainInstance( "B", "A" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "A", "A" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations()
+                    .contains( DirectedBinaryDomainCombination.obtainInstance( "A", "A" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "A", "C" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "A",
+                    "C" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "C", "A" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations()
+                    .contains( DirectedBinaryDomainCombination.obtainInstance( "C", "A" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "B", "C" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "B",
+                    "C" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "C", "X" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "C",
+                    "X" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "C", "Y" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "C",
+                    "Y" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "A", "X" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "A",
+                    "X" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "A", "Y" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "A",
+                    "Y" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "Y", "A" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "Y",
+                    "A" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "X", "A" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations()
+                    .contains( DirectedBinaryDomainCombination.obtainInstance( "X", "A" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "C", "B" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations()
+                    .contains( DirectedBinaryDomainCombination.obtainInstance( "C", "B" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "X", "Y" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "X",
+                    "Y" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "Y", "X" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "Y",
+                    "X" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "A", "Y" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "A",
+                    "Y" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "A", "X" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "A",
+                    "X" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "Y", "C" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations()
+                    .contains( DirectedBinaryDomainCombination.obtainInstance( "Y", "C" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "M", "N" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "M",
+                    "N" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "N", "M" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "N",
+                    "M" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "N", "P" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "N",
+                    "P" ) ) ) {
                 return false;
             }
-            if ( !gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "M", "P" ) ) ) {
+            if ( !gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "M",
+                    "P" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "P", "N" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations()
+                    .contains( DirectedBinaryDomainCombination.obtainInstance( "P", "N" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "P", "M" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations()
+                    .contains( DirectedBinaryDomainCombination.obtainInstance( "P", "M" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "XX", "YY" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "XX",
+                    "YY" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "YY", "XX" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations().contains( DirectedBinaryDomainCombination.obtainInstance( "YY",
+                    "XX" ) ) ) {
                 return false;
             }
-            if ( gwcd_1.toBinaryDomainCombinations().contains( new DirectedBinaryDomainCombination( "B", "B" ) ) ) {
+            if ( gwcd_1.toBinaryDomainCombinations()
+                    .contains( DirectedBinaryDomainCombination.obtainInstance( "B", "B" ) ) ) {
                 return false;
             }
             //            final List<GenomeWideCombinableDomains> gwcd_list = new ArrayList<GenomeWideCombinableDomains>();
@@ -2283,7 +1935,7 @@ public class TestSurfacing {
             //            if ( matrix_bc.getState( 0, 0 ) != X ) {
             //                return false;
             //            }
-            //        
+            //
             //
             //            final BasicCharacterStateMatrix<BinaryStates> dm = new BasicCharacterStateMatrix<BinaryStates>( new BinaryStates[][] {
             //                    { X, X, X, X, X, X }, { X, X, X, X, X, X } } );
@@ -2765,115 +2417,115 @@ public class TestSurfacing {
             final GenomeWideCombinableDomains gwcd_1 = BasicGenomeWideCombinableDomains
                     .createInstance( list_1, false, new BasicSpecies( "1" ), DomainCombinationType.DIRECTED_ADJACTANT );
             if ( !gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "A", "B" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "A", "B" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "B", "A" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "B", "A" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "A", "A" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "A", "A" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "A", "C" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "A", "C" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "C", "A" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "C", "A" ) ) ) {
                 return false;
             }
             if ( !gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "B", "C" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "B", "C" ) ) ) {
                 return false;
             }
             if ( !gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "C", "X" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "C", "X" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "C", "Y" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "C", "Y" ) ) ) {
                 return false;
             }
             if ( !gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "X", "Y" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "X", "Y" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "A", "X" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "A", "X" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "A", "Y" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "A", "Y" ) ) ) {
                 return false;
             }
             if ( !gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "Y", "A" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "Y", "A" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "X", "A" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "X", "A" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "C", "B" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "C", "B" ) ) ) {
                 return false;
             }
             if ( !gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "X", "Y" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "X", "Y" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "Y", "X" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "Y", "X" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "A", "Y" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "A", "Y" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "A", "X" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "A", "X" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "Y", "C" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "Y", "C" ) ) ) {
                 return false;
             }
             if ( !gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "M", "N" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "M", "N" ) ) ) {
                 return false;
             }
             if ( !gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "N", "M" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "N", "M" ) ) ) {
                 return false;
             }
             if ( !gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "N", "P" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "N", "P" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "M", "P" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "M", "P" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "P", "N" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "P", "N" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "P", "M" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "P", "M" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "XX", "YY" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "XX", "YY" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "YY", "XX" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "YY", "XX" ) ) ) {
                 return false;
             }
             if ( gwcd_1.toBinaryDomainCombinations()
-                    .contains( new AdjactantDirectedBinaryDomainCombination( "B", "B" ) ) ) {
+                    .contains( AdjactantDirectedBinaryDomainCombination.obtainInstance( "B", "B" ) ) ) {
                 return false;
             }
         }
@@ -3107,7 +2759,7 @@ public class TestSurfacing {
             if ( !calc_i.getSharedDomains().contains( f.getDomainId() ) ) {
                 return false;
             }
-            final Set<DomainId> all = calc_ni.getAllDomains();
+            final Set<String> all = calc_ni.getAllDomains();
             if ( !all.contains( a.getDomainId() ) ) {
                 return false;
             }
@@ -3182,270 +2834,270 @@ public class TestSurfacing {
             if ( shared_i.size() != 3 ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "a", "a" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "a" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "b", "a" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "a" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "a", "c" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "c" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "a", "d" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "d" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "a", "e" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "e" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "b", "c" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "c" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "b", "d" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "d" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "b", "e" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "e" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "c", "d" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "c", "d" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "c", "e" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "c", "e" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "d", "e" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "d", "e" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "e", "f" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "e", "f" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "g", "h" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "g", "h" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "f", "f" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "f", "f" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "e", "e" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "e", "e" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "a", "i" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "i" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "a", "l" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "l" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "b", "i" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "i" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "b", "l" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "l" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "c", "i" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "c", "i" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "c", "l" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "c", "l" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "i", "l" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "i", "l" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "i", "f" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "i", "f" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "m", "n" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "m", "n" ) ) ) {
                 return false;
             }
-            if ( !a_ni.contains( new BasicBinaryDomainCombination( "j", "k" ) ) ) {
+            if ( !a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "j", "k" ) ) ) {
                 return false;
             }
-            if ( a_ni.contains( new BasicBinaryDomainCombination( "a", "g" ) ) ) {
+            if ( a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "g" ) ) ) {
                 return false;
             }
-            if ( a_ni.contains( new BasicBinaryDomainCombination( "a", "m" ) ) ) {
+            if ( a_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "m" ) ) ) {
                 return false;
             }
-            if ( a_i.contains( new BasicBinaryDomainCombination( "a", "a" ) ) ) {
+            if ( a_i.contains( BasicBinaryDomainCombination.obtainInstance( "a", "a" ) ) ) {
                 return false;
             }
-            if ( a_i.contains( new BasicBinaryDomainCombination( "f", "f" ) ) ) {
+            if ( a_i.contains( BasicBinaryDomainCombination.obtainInstance( "f", "f" ) ) ) {
                 return false;
             }
-            if ( a_i.contains( new BasicBinaryDomainCombination( "e", "e" ) ) ) {
+            if ( a_i.contains( BasicBinaryDomainCombination.obtainInstance( "e", "e" ) ) ) {
                 return false;
             }
-            if ( !shared_ni.contains( new BasicBinaryDomainCombination( "a", "a" ) ) ) {
+            if ( !shared_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "a" ) ) ) {
                 return false;
             }
-            if ( !shared_ni.contains( new BasicBinaryDomainCombination( "a", "b" ) ) ) {
+            if ( !shared_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "b" ) ) ) {
                 return false;
             }
-            if ( !shared_ni.contains( new BasicBinaryDomainCombination( "a", "c" ) ) ) {
+            if ( !shared_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "c" ) ) ) {
                 return false;
             }
-            if ( !shared_ni.contains( new BasicBinaryDomainCombination( "b", "c" ) ) ) {
+            if ( !shared_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "c" ) ) ) {
                 return false;
             }
-            if ( !shared_ni.contains( new BasicBinaryDomainCombination( "f", "f" ) ) ) {
+            if ( !shared_ni.contains( BasicBinaryDomainCombination.obtainInstance( "f", "f" ) ) ) {
                 return false;
             }
-            if ( shared_ni.contains( new BasicBinaryDomainCombination( "m", "n" ) ) ) {
+            if ( shared_ni.contains( BasicBinaryDomainCombination.obtainInstance( "m", "n" ) ) ) {
                 return false;
             }
-            if ( shared_i.contains( new BasicBinaryDomainCombination( "a", "a" ) ) ) {
+            if ( shared_i.contains( BasicBinaryDomainCombination.obtainInstance( "a", "a" ) ) ) {
                 return false;
             }
-            if ( !shared_i.contains( new BasicBinaryDomainCombination( "a", "b" ) ) ) {
+            if ( !shared_i.contains( BasicBinaryDomainCombination.obtainInstance( "a", "b" ) ) ) {
                 return false;
             }
-            if ( !shared_i.contains( new BasicBinaryDomainCombination( "a", "c" ) ) ) {
+            if ( !shared_i.contains( BasicBinaryDomainCombination.obtainInstance( "a", "c" ) ) ) {
                 return false;
             }
-            if ( !shared_i.contains( new BasicBinaryDomainCombination( "b", "c" ) ) ) {
+            if ( !shared_i.contains( BasicBinaryDomainCombination.obtainInstance( "b", "c" ) ) ) {
                 return false;
             }
-            if ( shared_i.contains( new BasicBinaryDomainCombination( "f", "f" ) ) ) {
+            if ( shared_i.contains( BasicBinaryDomainCombination.obtainInstance( "f", "f" ) ) ) {
                 return false;
             }
-            if ( shared_i.contains( new BasicBinaryDomainCombination( "m", "n" ) ) ) {
+            if ( shared_i.contains( BasicBinaryDomainCombination.obtainInstance( "m", "n" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "a", "d" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "d" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "a", "e" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "e" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "b", "d" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "d" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "b", "e" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "e" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "c", "d" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "c", "d" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "c", "e" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "c", "e" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "d", "e" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "d", "e" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "e", "f" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "e", "f" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "g", "h" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "g", "h" ) ) ) {
                 return false;
             }
-            if ( !s_0_ni.contains( new BasicBinaryDomainCombination( "e", "e" ) ) ) {
+            if ( !s_0_ni.contains( BasicBinaryDomainCombination.obtainInstance( "e", "e" ) ) ) {
                 return false;
             }
-            if ( !s_0_i.contains( new BasicBinaryDomainCombination( "a", "d" ) ) ) {
+            if ( !s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "a", "d" ) ) ) {
                 return false;
             }
-            if ( !s_0_i.contains( new BasicBinaryDomainCombination( "a", "e" ) ) ) {
+            if ( !s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "a", "e" ) ) ) {
                 return false;
             }
-            if ( !s_0_i.contains( new BasicBinaryDomainCombination( "b", "d" ) ) ) {
+            if ( !s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "b", "d" ) ) ) {
                 return false;
             }
-            if ( !s_0_i.contains( new BasicBinaryDomainCombination( "b", "e" ) ) ) {
+            if ( !s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "b", "e" ) ) ) {
                 return false;
             }
-            if ( !s_0_i.contains( new BasicBinaryDomainCombination( "c", "d" ) ) ) {
+            if ( !s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "c", "d" ) ) ) {
                 return false;
             }
-            if ( !s_0_i.contains( new BasicBinaryDomainCombination( "c", "e" ) ) ) {
+            if ( !s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "c", "e" ) ) ) {
                 return false;
             }
-            if ( !s_0_i.contains( new BasicBinaryDomainCombination( "d", "e" ) ) ) {
+            if ( !s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "d", "e" ) ) ) {
                 return false;
             }
-            if ( !s_0_i.contains( new BasicBinaryDomainCombination( "e", "f" ) ) ) {
+            if ( !s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "e", "f" ) ) ) {
                 return false;
             }
-            if ( !s_0_i.contains( new BasicBinaryDomainCombination( "g", "h" ) ) ) {
+            if ( !s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "g", "h" ) ) ) {
                 return false;
             }
-            if ( s_0_i.contains( new BasicBinaryDomainCombination( "e", "e" ) ) ) {
+            if ( s_0_i.contains( BasicBinaryDomainCombination.obtainInstance( "e", "e" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "a", "i" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "i" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "a", "l" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "l" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "b", "i" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "i" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "b", "l" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "b", "l" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "c", "i" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "c", "i" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "c", "l" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "c", "l" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "l", "i" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "l", "i" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "i", "f" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "i", "f" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "m", "n" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "m", "n" ) ) ) {
                 return false;
             }
-            if ( !s_1_ni.contains( new BasicBinaryDomainCombination( "j", "k" ) ) ) {
+            if ( !s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "j", "k" ) ) ) {
                 return false;
             }
-            if ( s_1_ni.contains( new BasicBinaryDomainCombination( "a", "b" ) ) ) {
+            if ( s_1_ni.contains( BasicBinaryDomainCombination.obtainInstance( "a", "b" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "a", "i" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "a", "i" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "a", "l" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "a", "l" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "b", "i" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "b", "i" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "b", "l" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "b", "l" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "c", "i" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "c", "i" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "c", "l" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "c", "l" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "l", "i" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "l", "i" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "i", "f" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "i", "f" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "m", "n" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "m", "n" ) ) ) {
                 return false;
             }
-            if ( !s_1_i.contains( new BasicBinaryDomainCombination( "j", "k" ) ) ) {
+            if ( !s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "j", "k" ) ) ) {
                 return false;
             }
-            if ( s_1_i.contains( new BasicBinaryDomainCombination( "a", "b" ) ) ) {
+            if ( s_1_i.contains( BasicBinaryDomainCombination.obtainInstance( "a", "b" ) ) ) {
                 return false;
             }
             if ( !isEqual( calc_ni.calculateSharedBinaryDomainCombinationBasedGenomeSimilarityScore(),
-                           1.0 - ( 25.0 - 5.0 ) / 25.0 ) ) {
+                           1.0 - ( ( 25.0 - 5.0 ) / 25.0 ) ) ) {
                 return false;
             }
             if ( !isEqual( calc_i.calculateSharedBinaryDomainCombinationBasedGenomeSimilarityScore(),
-                           1.0 - ( 22.0 - 3.0 ) / 22.0 ) ) {
+                           1.0 - ( ( 22.0 - 3.0 ) / 22.0 ) ) ) {
                 return false;
             }
-            if ( !isEqual( calc_ni.calculateSharedDomainsBasedGenomeSimilarityScore(), 1.0 - ( 14.0 - 4.0 ) / 14.0 ) ) {
+            if ( !isEqual( calc_ni.calculateSharedDomainsBasedGenomeSimilarityScore(), 1.0 - ( ( 14.0 - 4.0 ) / 14.0 ) ) ) {
                 return false;
             }
-            if ( !isEqual( calc_i.calculateSharedDomainsBasedGenomeSimilarityScore(), 1.0 - ( 14.0 - 4.0 ) / 14.0 ) ) {
+            if ( !isEqual( calc_i.calculateSharedDomainsBasedGenomeSimilarityScore(), 1.0 - ( ( 14.0 - 4.0 ) / 14.0 ) ) ) {
                 return false;
             }
             final Domain u = new BasicDomain( "u", 23, 25, ( short ) 1, ( short ) 4, 0.1, -12 );
@@ -3548,42 +3200,49 @@ public class TestSurfacing {
                 return false;
             }
             if ( !calc_u.getBinaryDomainCombinationsSpecificToGenome0()
-                    .contains( new BasicBinaryDomainCombination( "v", "u" ) ) ) {
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "v", "u" ) ) ) {
                 return false;
             }
             if ( !calc_u.getBinaryDomainCombinationsSpecificToGenome0()
-                    .contains( new BasicBinaryDomainCombination( "w", "v" ) ) ) {
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "w", "v" ) ) ) {
                 return false;
             }
             if ( !calc_u.getBinaryDomainCombinationsSpecificToGenome0()
-                    .contains( new BasicBinaryDomainCombination( "w", "x" ) ) ) {
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "w", "x" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getSharedBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "w", "u" ) ) ) {
+            if ( !calc_u.getSharedBinaryDomainCombinations()
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "w", "u" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getSharedBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "z", "y" ) ) ) {
+            if ( !calc_u.getSharedBinaryDomainCombinations()
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "z", "y" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "v", "u" ) ) ) {
+            if ( !calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "v",
+                    "u" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "w", "v" ) ) ) {
+            if ( !calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "w",
+                    "v" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "w", "x" ) ) ) {
+            if ( !calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "w",
+                    "x" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "w", "u" ) ) ) {
+            if ( !calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "w",
+                    "u" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "z", "y" ) ) ) {
+            if ( !calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "z",
+                    "y" ) ) ) {
                 return false;
             }
             calc_u.setAllowDomainsToBeIgnored( true );
             calc_u.addDomainIdToIgnore( u.getDomainId() );
-            calc_u.addDomainIdToIgnore( new DomainId( "other" ) );
-            calc_u.addDomainIdToIgnore( new DomainId( "other_too" ) );
+            calc_u.addDomainIdToIgnore( "other" );
+            calc_u.addDomainIdToIgnore( "other_too" );
             if ( calc_u.getAllDomains().size() != 5 ) {
                 return false;
             }
@@ -3648,36 +3307,43 @@ public class TestSurfacing {
                 return false;
             }
             if ( calc_u.getBinaryDomainCombinationsSpecificToGenome0()
-                    .contains( new BasicBinaryDomainCombination( "v", "u" ) ) ) {
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "v", "u" ) ) ) {
                 return false;
             }
             if ( !calc_u.getBinaryDomainCombinationsSpecificToGenome0()
-                    .contains( new BasicBinaryDomainCombination( "w", "v" ) ) ) {
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "w", "v" ) ) ) {
                 return false;
             }
             if ( !calc_u.getBinaryDomainCombinationsSpecificToGenome0()
-                    .contains( new BasicBinaryDomainCombination( "w", "x" ) ) ) {
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "w", "x" ) ) ) {
                 return false;
             }
-            if ( calc_u.getSharedBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "w", "u" ) ) ) {
+            if ( calc_u.getSharedBinaryDomainCombinations()
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "w", "u" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getSharedBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "z", "y" ) ) ) {
+            if ( !calc_u.getSharedBinaryDomainCombinations()
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "z", "y" ) ) ) {
                 return false;
             }
-            if ( calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "v", "u" ) ) ) {
+            if ( calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "v",
+                    "u" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "w", "v" ) ) ) {
+            if ( !calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "w",
+                    "v" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "w", "x" ) ) ) {
+            if ( !calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "w",
+                    "x" ) ) ) {
                 return false;
             }
-            if ( calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "w", "u" ) ) ) {
+            if ( calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "w",
+                    "u" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "z", "y" ) ) ) {
+            if ( !calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "z",
+                    "y" ) ) ) {
                 return false;
             }
             calc_u.setAllowDomainsToBeIgnored( false );
@@ -3687,10 +3353,10 @@ public class TestSurfacing {
             //------------
             calc_u.setAllowDomainsToBeIgnored( true );
             calc_u.deleteAllDomainIdsToIgnore();
-            calc_u.addDomainIdToIgnore( new DomainId( "v" ) );
-            calc_u.addDomainIdToIgnore( new DomainId( "w" ) );
-            calc_u.addDomainIdToIgnore( new DomainId( "other" ) );
-            calc_u.addDomainIdToIgnore( new DomainId( "other_too" ) );
+            calc_u.addDomainIdToIgnore( "v" );
+            calc_u.addDomainIdToIgnore( "w" );
+            calc_u.addDomainIdToIgnore( "other" );
+            calc_u.addDomainIdToIgnore( "other_too" );
             if ( calc_u.getAllDomains().size() != 4 ) {
                 return false;
             }
@@ -3754,41 +3420,43 @@ public class TestSurfacing {
             if ( calc_u.getAllBinaryDomainCombinations().size() != 1 ) {
                 return false;
             }
-            if ( !calc_u.getSharedBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "y", "z" ) ) ) {
+            if ( !calc_u.getSharedBinaryDomainCombinations()
+                    .contains( BasicBinaryDomainCombination.obtainInstance( "y", "z" ) ) ) {
                 return false;
             }
-            if ( !calc_u.getAllBinaryDomainCombinations().contains( new BasicBinaryDomainCombination( "z", "y" ) ) ) {
+            if ( !calc_u.getAllBinaryDomainCombinations().contains( BasicBinaryDomainCombination.obtainInstance( "z",
+                    "y" ) ) ) {
                 return false;
             }
             if ( !isEqual( calc_u.calculateSharedBinaryDomainCombinationBasedGenomeSimilarityScore(),
-                           1.0 - ( 1.0 - 1.0 ) / 1.0 ) ) {
+                           1.0 - ( ( 1.0 - 1.0 ) / 1.0 ) ) ) {
                 return false;
             }
-            if ( !isEqual( calc_u.calculateSharedDomainsBasedGenomeSimilarityScore(), 1.0 - ( 4.0 - 3.0 ) / 4.0 ) ) {
+            if ( !isEqual( calc_u.calculateSharedDomainsBasedGenomeSimilarityScore(), 1.0 - ( ( 4.0 - 3.0 ) / 4.0 ) ) ) {
                 return false;
             }
             calc_u.setAllowDomainsToBeIgnored( false );
             if ( !isEqual( calc_u.calculateSharedBinaryDomainCombinationBasedGenomeSimilarityScore(),
-                           1.0 - ( 5.0 - 2.0 ) / 5.0 ) ) {
+                           1.0 - ( ( 5.0 - 2.0 ) / 5.0 ) ) ) {
                 return false;
             }
-            if ( !isEqual( calc_u.calculateSharedDomainsBasedGenomeSimilarityScore(), 1.0 - ( 6.0 - 4.0 ) / 6.0 ) ) {
+            if ( !isEqual( calc_u.calculateSharedDomainsBasedGenomeSimilarityScore(), 1.0 - ( ( 6.0 - 4.0 ) / 6.0 ) ) ) {
                 return false;
             }
             calc_u.setAllowDomainsToBeIgnored( true );
             if ( !isEqual( calc_u.calculateSharedBinaryDomainCombinationBasedGenomeSimilarityScore(),
-                           1.0 - ( 1.0 - 1.0 ) / 1.0 ) ) {
+                           1.0 - ( ( 1.0 - 1.0 ) / 1.0 ) ) ) {
                 return false;
             }
-            if ( !isEqual( calc_u.calculateSharedDomainsBasedGenomeSimilarityScore(), 1.0 - ( 4.0 - 3.0 ) / 4.0 ) ) {
+            if ( !isEqual( calc_u.calculateSharedDomainsBasedGenomeSimilarityScore(), 1.0 - ( ( 4.0 - 3.0 ) / 4.0 ) ) ) {
                 return false;
             }
             calc_u.deleteAllDomainIdsToIgnore();
             if ( !isEqual( calc_u.calculateSharedBinaryDomainCombinationBasedGenomeSimilarityScore(),
-                           1.0 - ( 5.0 - 2.0 ) / 5.0 ) ) {
+                           1.0 - ( ( 5.0 - 2.0 ) / 5.0 ) ) ) {
                 return false;
             }
-            if ( !isEqual( calc_u.calculateSharedDomainsBasedGenomeSimilarityScore(), 1.0 - ( 6.0 - 4.0 ) / 6.0 ) ) {
+            if ( !isEqual( calc_u.calculateSharedDomainsBasedGenomeSimilarityScore(), 1.0 - ( ( 6.0 - 4.0 ) / 6.0 ) ) ) {
                 return false;
             }
         }
@@ -3802,14 +3470,14 @@ public class TestSurfacing {
     private static boolean testDomainCombinationCounting( final File test_dir ) {
         try {
             final HmmPfamOutputParser parser = new HmmPfamOutputParser( new File( test_dir
-                    + ForesterUtil.getFileSeparator() + "hmmpfam_output2" ), "human", "ls" );
+                                                                                  + ForesterUtil.getFileSeparator() + "hmmpfam_output2" ), "human", "ls" );
             parser.setEValueMaximum( 0.2 );
             parser.setIgnoreDufs( true );
             parser.setReturnType( HmmPfamOutputParser.ReturnType.UNORDERED_PROTEIN_DOMAIN_COLLECTION_PER_PROTEIN );
             final List<Protein> domain_collections = parser.parse();
             final BasicGenomeWideCombinableDomains cdcc = BasicGenomeWideCombinableDomains
                     .createInstance( domain_collections, false, new BasicSpecies( "human" ) );
-            CombinableDomains cd = cdcc.get( new DomainId( "A" ) );
+            CombinableDomains cd = cdcc.get( "A" );
             if ( cd.getKeyDomainCount() != 9 ) {
                 return false;
             }
@@ -3858,7 +3526,7 @@ public class TestSurfacing {
             if ( cd.getKeyDomainCount() != 9 ) {
                 return false;
             }
-            cd = cdcc.get( new DomainId( "B" ) );
+            cd = cdcc.get( "B" );
             if ( cd.getKeyDomainCount() != 12 ) {
                 return false;
             }
@@ -3907,7 +3575,7 @@ public class TestSurfacing {
             if ( cd.getKeyDomainCount() != 12 ) {
                 return false;
             }
-            cd = cdcc.get( new DomainId( "C" ) );
+            cd = cdcc.get( "C" );
             if ( cd.getKeyDomainCount() != 10 ) {
                 return false;
             }
@@ -3953,7 +3621,7 @@ public class TestSurfacing {
             if ( cd.getNumberOfProteinsExhibitingCombination( new SimpleDomain( "NN" ).getDomainId() ) != 0 ) {
                 return false;
             }
-            cd = cdcc.get( new DomainId( "D" ) );
+            cd = cdcc.get( "D" );
             if ( cd.getKeyDomainCount() != 15 ) {
                 return false;
             }
@@ -3963,7 +3631,7 @@ public class TestSurfacing {
             if ( cd.getNumberOfCombinableDomains() != 11 ) {
                 return false;
             }
-            cd = cdcc.get( new DomainId( "E" ) );
+            cd = cdcc.get( "E" );
             if ( cd.getNumberOfCombinableDomains() != 10 ) {
                 return false;
             }
@@ -3973,7 +3641,7 @@ public class TestSurfacing {
             if ( cd.getKeyDomainProteinsCount() != 1 ) {
                 return false;
             }
-            cd = cdcc.get( new DomainId( "U" ) );
+            cd = cdcc.get( "U" );
             if ( cd.getNumberOfCombinableDomains() != 11 ) {
                 return false;
             }
@@ -3983,7 +3651,7 @@ public class TestSurfacing {
             if ( cd.getKeyDomainProteinsCount() != 3 ) {
                 return false;
             }
-            cd = cdcc.get( new DomainId( "V" ) );
+            cd = cdcc.get( "V" );
             if ( cd.getNumberOfCombinableDomains() != 11 ) {
                 return false;
             }
@@ -3993,7 +3661,7 @@ public class TestSurfacing {
             if ( cd.getKeyDomainProteinsCount() != 2 ) {
                 return false;
             }
-            cd = cdcc.get( new DomainId( "W" ) );
+            cd = cdcc.get( "W" );
             if ( cd.getNumberOfCombinableDomains() != 10 ) {
                 return false;
             }
@@ -4003,22 +3671,22 @@ public class TestSurfacing {
             if ( cd.getKeyDomainProteinsCount() != 2 ) {
                 return false;
             }
-            cd = cdcc.get( new DomainId( "X" ) );
+            cd = cdcc.get( "X" );
             if ( cd.getNumberOfCombinableDomains() != 10 ) {
                 return false;
             }
             if ( cd.getKeyDomainCount() != 2 ) {
                 return false;
             }
-            cd = cdcc.get( new DomainId( "Y" ) );
+            cd = cdcc.get( "Y" );
             if ( cd.getNumberOfCombinableDomains() != 10 ) {
                 return false;
             }
-            cd = cdcc.get( new DomainId( "Z" ) );
+            cd = cdcc.get( "Z" );
             if ( cd.getNumberOfCombinableDomains() != 10 ) {
                 return false;
             }
-            cd = cdcc.get( new DomainId( "NN" ) );
+            cd = cdcc.get( "NN" );
             if ( cd.getKeyDomainCount() != 1 ) {
                 return false;
             }
@@ -4031,7 +3699,7 @@ public class TestSurfacing {
             if ( cd.getNumberOfProteinsExhibitingCombination( new SimpleDomain( "NN" ).getDomainId() ) != 0 ) {
                 return false;
             }
-            cd = cdcc.get( new DomainId( "MM" ) );
+            cd = cdcc.get( "MM" );
             if ( cd.getNumberOfCombinableDomains() != 1 ) {
                 return false;
             }
@@ -4041,7 +3709,7 @@ public class TestSurfacing {
             if ( cd.getNumberOfProteinsExhibitingCombination( new SimpleDomain( "OO" ).getDomainId() ) != 1 ) {
                 return false;
             }
-            cd = cdcc.get( new DomainId( "OO" ) );
+            cd = cdcc.get( "OO" );
             if ( cd.getNumberOfCombinableDomains() != 2 ) {
                 return false;
             }
@@ -4051,7 +3719,7 @@ public class TestSurfacing {
             if ( cd.getNumberOfProteinsExhibitingCombination( new SimpleDomain( "MM" ).getDomainId() ) != 1 ) {
                 return false;
             }
-            cd = cdcc.get( new DomainId( "QQ" ) );
+            cd = cdcc.get( "QQ" );
             if ( cd.getNumberOfCombinableDomains() != 1 ) {
                 return false;
             }
@@ -4064,7 +3732,7 @@ public class TestSurfacing {
             if ( cd.getNumberOfProteinsExhibitingCombination( new SimpleDomain( "QQ" ).getDomainId() ) != 3 ) {
                 return false;
             }
-            cd = cdcc.get( new DomainId( "PP" ) );
+            cd = cdcc.get( "PP" );
             if ( cd.getNumberOfCombinableDomains() != 0 ) {
                 return false;
             }
@@ -4074,7 +3742,7 @@ public class TestSurfacing {
             if ( cd.getKeyDomainProteinsCount() != 2 ) {
                 return false;
             }
-            cd = cdcc.get( new DomainId( "singlet" ) );
+            cd = cdcc.get( "singlet" );
             if ( cd.getKeyDomainCount() != 1 ) {
                 return false;
             }
@@ -4087,7 +3755,7 @@ public class TestSurfacing {
             if ( cd.getNumberOfProteinsExhibitingCombination( new SimpleDomain( "singlet" ).getDomainId() ) != 0 ) {
                 return false;
             }
-            cd = cdcc.get( new DomainId( "three" ) );
+            cd = cdcc.get( "three" );
             if ( cd.getKeyDomainCount() != 3 ) {
                 return false;
             }
@@ -4097,10 +3765,10 @@ public class TestSurfacing {
             if ( cd.getNumberOfCombinableDomains() != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "three" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "three" ) != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "so_far_so_bad" ) ) != 0 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "so_far_so_bad" ) != 0 ) {
                 return false;
             }
             // Ignore combinations with same:
@@ -4112,7 +3780,7 @@ public class TestSurfacing {
                                      DomainCombinationType.BASIC,
                                      null,
                                      null );
-            cd = cdcc2.get( new DomainId( "A" ) );
+            cd = cdcc2.get( "A" );
             if ( cd.getKeyDomainCount() != 9 ) {
                 return false;
             }
@@ -4137,28 +3805,28 @@ public class TestSurfacing {
             if ( cd.getNumberOfProteinsExhibitingCombination( new SimpleDomain( "E" ).getDomainId() ) != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "U" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "U" ) != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "V" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "V" ) != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "W" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "W" ) != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "X" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "X" ) != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "Y" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "Y" ) != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "Z" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "Z" ) != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "NN" ) ) != 0 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "NN" ) != 0 ) {
                 return false;
             }
-            cd = cdcc2.get( new DomainId( "B" ) );
+            cd = cdcc2.get( "B" );
             if ( cd.getKeyDomainCount() != 12 ) {
                 return false;
             }
@@ -4168,43 +3836,43 @@ public class TestSurfacing {
             if ( cd.getNumberOfCombinableDomains() != 10 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "A" ) ) != 6 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "A" ) != 6 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "B" ) ) != 0 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "B" ) != 0 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "C" ) ) != 4 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "C" ) != 4 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "D" ) ) != 3 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "D" ) != 3 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "E" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "E" ) != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "U" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "U" ) != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "V" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "V" ) != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "W" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "W" ) != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "X" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "X" ) != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "Y" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "Y" ) != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "Z" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "Z" ) != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "NN" ) ) != 0 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "NN" ) != 0 ) {
                 return false;
             }
-            cd = cdcc2.get( new DomainId( "C" ) );
+            cd = cdcc2.get( "C" );
             if ( cd.getKeyDomainCount() != 10 ) {
                 return false;
             }
@@ -4214,112 +3882,112 @@ public class TestSurfacing {
             if ( cd.getNumberOfCombinableDomains() != 10 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "A" ) ) != 4 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "A" ) != 4 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "B" ) ) != 4 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "B" ) != 4 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "C" ) ) != 0 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "C" ) != 0 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "D" ) ) != 3 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "D" ) != 3 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "E" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "E" ) != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "U" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "U" ) != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "V" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "V" ) != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "W" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "W" ) != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "X" ) ) != 2 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "X" ) != 2 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "Y" ) ) != 2 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "Y" ) != 2 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "Z" ) ) != 2 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "Z" ) != 2 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "NN" ) ) != 0 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "NN" ) != 0 ) {
                 return false;
             }
-            cd = cdcc2.get( new DomainId( "D" ) );
+            cd = cdcc2.get( "D" );
             if ( cd.getNumberOfCombinableDomains() != 10 ) {
                 return false;
             }
-            cd = cdcc2.get( new DomainId( "E" ) );
+            cd = cdcc2.get( "E" );
             if ( cd.getNumberOfCombinableDomains() != 10 ) {
                 return false;
             }
             if ( cd.getKeyDomainCount() != 1 ) {
                 return false;
             }
-            cd = cdcc2.get( new DomainId( "U" ) );
+            cd = cdcc2.get( "U" );
             if ( cd.getNumberOfCombinableDomains() != 10 ) {
                 return false;
             }
-            cd = cdcc2.get( new DomainId( "V" ) );
+            cd = cdcc2.get( "V" );
             if ( cd.getNumberOfCombinableDomains() != 10 ) {
                 return false;
             }
-            cd = cdcc2.get( new DomainId( "W" ) );
+            cd = cdcc2.get( "W" );
             if ( cd.getNumberOfCombinableDomains() != 10 ) {
                 return false;
             }
-            cd = cdcc2.get( new DomainId( "X" ) );
+            cd = cdcc2.get( "X" );
             if ( cd.getNumberOfCombinableDomains() != 10 ) {
                 return false;
             }
-            cd = cdcc2.get( new DomainId( "Y" ) );
+            cd = cdcc2.get( "Y" );
             if ( cd.getNumberOfCombinableDomains() != 10 ) {
                 return false;
             }
-            cd = cdcc2.get( new DomainId( "Z" ) );
+            cd = cdcc2.get( "Z" );
             if ( cd.getNumberOfCombinableDomains() != 10 ) {
                 return false;
             }
-            cd = cdcc2.get( new DomainId( "NN" ) );
+            cd = cdcc2.get( "NN" );
             if ( cd.getNumberOfCombinableDomains() != 0 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "NN" ) ) != 0 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "NN" ) != 0 ) {
                 return false;
             }
-            cd = cdcc2.get( new DomainId( "MM" ) );
+            cd = cdcc2.get( "MM" );
             if ( cd.getNumberOfCombinableDomains() != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "MM" ) ) != 0 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "MM" ) != 0 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "OO" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "OO" ) != 1 ) {
                 return false;
             }
-            cd = cdcc2.get( new DomainId( "OO" ) );
+            cd = cdcc2.get( "OO" );
             if ( cd.getNumberOfCombinableDomains() != 1 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "OO" ) ) != 0 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "OO" ) != 0 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "MM" ) ) != 1 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "MM" ) != 1 ) {
                 return false;
             }
-            cd = cdcc2.get( new DomainId( "QQ" ) );
+            cd = cdcc2.get( "QQ" );
             if ( cd.getNumberOfCombinableDomains() != 0 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "QQ" ) ) != 0 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "QQ" ) != 0 ) {
                 return false;
             }
-            cd = cdcc2.get( new DomainId( "singlet" ) );
+            cd = cdcc2.get( "singlet" );
             if ( cd.getKeyDomainCount() != 1 ) {
                 return false;
             }
@@ -4329,10 +3997,10 @@ public class TestSurfacing {
             if ( cd.getNumberOfCombinableDomains() != 0 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "singlet" ) ) != 0 ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "singlet" ) != 0 ) {
                 return false;
             }
-            cd = cdcc2.get( new DomainId( "three" ) );
+            cd = cdcc2.get( "three" );
             if ( cd.getKeyDomainCount() != 3 ) {
                 return false;
             }
@@ -4342,73 +4010,10 @@ public class TestSurfacing {
             if ( cd.getNumberOfCombinableDomains() != 0 ) {
                 return false;
             }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "three" ) ) != 0 ) {
-                return false;
-            }
-            if ( cd.getNumberOfProteinsExhibitingCombination( new DomainId( "so_far_so_bad" ) ) != 0 ) {
-                return false;
-            }
-        }
-        catch ( final Exception e ) {
-            e.printStackTrace( System.out );
-            return false;
-        }
-        return true;
-    }
-
-    private static boolean testDomainId() {
-        try {
-            final DomainId id1 = new DomainId( "a" );
-            final DomainId id2 = new DomainId( "a" );
-            final DomainId id3 = new DomainId( "A" );
-            final DomainId id4 = new DomainId( "b" );
-            if ( !id1.equals( id1 ) ) {
-                return false;
-            }
-            if ( id1.getId().equals( "x" ) ) {
-                return false;
-            }
-            if ( id1.getId().equals( null ) ) {
-                return false;
-            }
-            if ( !id1.equals( id2 ) ) {
-                return false;
-            }
-            if ( id1.equals( id3 ) ) {
-                return false;
-            }
-            if ( id1.hashCode() != id1.hashCode() ) {
-                return false;
-            }
-            if ( id1.hashCode() != id2.hashCode() ) {
-                return false;
-            }
-            if ( id1.hashCode() == id3.hashCode() ) {
-                return false;
-            }
-            if ( id1.compareTo( id1 ) != 0 ) {
-                return false;
-            }
-            if ( id1.compareTo( id2 ) != 0 ) {
-                return false;
-            }
-            if ( id1.compareTo( id3 ) != 0 ) {
-                return false;
-            }
-            if ( id1.compareTo( id4 ) >= 0 ) {
-                return false;
-            }
-            if ( id4.compareTo( id1 ) <= 0 ) {
-                return false;
-            }
-            if ( !id4.getId().equals( "b" ) ) {
-                return false;
-            }
-            final DomainId id5 = new DomainId( " C " );
-            if ( !id5.getId().equals( "C" ) ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "three" ) != 0 ) {
                 return false;
             }
-            if ( id5.equals( id1 ) ) {
+            if ( cd.getNumberOfProteinsExhibitingCombination( "so_far_so_bad" ) != 0 ) {
                 return false;
             }
         }
@@ -4464,73 +4069,73 @@ public class TestSurfacing {
             if ( sorted.size() != 17 ) {
                 return false;
             }
-            if ( !sorted.get( 0 ).getDomainId().getId().equals( "A" ) ) {
+            if ( !sorted.get( 0 ).getDomainId().equals( "A" ) ) {
                 return false;
             }
             if ( sorted.get( 0 ).getNumber() != 1 ) {
                 return false;
             }
-            if ( !sorted.get( 1 ).getDomainId().getId().equals( "B" ) ) {
+            if ( !sorted.get( 1 ).getDomainId().equals( "B" ) ) {
                 return false;
             }
             if ( sorted.get( 1 ).getNumber() != 1 ) {
                 return false;
             }
-            if ( !sorted.get( 2 ).getDomainId().getId().equals( "C" ) ) {
+            if ( !sorted.get( 2 ).getDomainId().equals( "C" ) ) {
                 return false;
             }
             if ( sorted.get( 2 ).getNumber() != 1 ) {
                 return false;
             }
-            if ( !sorted.get( 3 ).getDomainId().getId().equals( "D" ) ) {
+            if ( !sorted.get( 3 ).getDomainId().equals( "D" ) ) {
                 return false;
             }
             if ( sorted.get( 3 ).getNumber() != 1 ) {
                 return false;
             }
-            if ( !sorted.get( 4 ).getDomainId().getId().equals( "E" ) ) {
+            if ( !sorted.get( 4 ).getDomainId().equals( "E" ) ) {
                 return false;
             }
             if ( sorted.get( 4 ).getNumber() != 1 ) {
                 return false;
             }
-            if ( !sorted.get( 5 ).getDomainId().getId().equals( "F" ) ) {
+            if ( !sorted.get( 5 ).getDomainId().equals( "F" ) ) {
                 return false;
             }
             if ( sorted.get( 5 ).getNumber() != 1 ) {
                 return false;
             }
-            if ( !sorted.get( 6 ).getDomainId().getId().equals( "G" ) ) {
+            if ( !sorted.get( 6 ).getDomainId().equals( "G" ) ) {
                 return false;
             }
             if ( sorted.get( 6 ).getNumber() != 1 ) {
                 return false;
             }
-            if ( !sorted.get( 7 ).getDomainId().getId().equals( "H" ) ) {
+            if ( !sorted.get( 7 ).getDomainId().equals( "H" ) ) {
                 return false;
             }
             if ( sorted.get( 7 ).getNumber() != 5 ) {
                 return false;
             }
-            if ( !sorted.get( 8 ).getDomainId().getId().equals( "H" ) ) {
+            if ( !sorted.get( 8 ).getDomainId().equals( "H" ) ) {
                 return false;
             }
             if ( sorted.get( 8 ).getNumber() != 2 ) {
                 return false;
             }
-            if ( !sorted.get( 9 ).getDomainId().getId().equals( "H" ) ) {
+            if ( !sorted.get( 9 ).getDomainId().equals( "H" ) ) {
                 return false;
             }
             if ( sorted.get( 9 ).getNumber() != 6 ) {
                 return false;
             }
-            if ( !sorted.get( 10 ).getDomainId().getId().equals( "H" ) ) {
+            if ( !sorted.get( 10 ).getDomainId().equals( "H" ) ) {
                 return false;
             }
             if ( sorted.get( 10 ).getNumber() != 4 ) {
                 return false;
             }
-            if ( !sorted.get( 11 ).getDomainId().getId().equals( "H" ) ) {
+            if ( !sorted.get( 11 ).getDomainId().equals( "H" ) ) {
                 return false;
             }
             if ( sorted.get( 11 ).getNumber() != 1 ) {
@@ -4539,25 +4144,25 @@ public class TestSurfacing {
             if ( sorted.get( 11 ).getTotalCount() != 5 ) {
                 return false;
             }
-            if ( !sorted.get( 12 ).getDomainId().getId().equals( "H" ) ) {
+            if ( !sorted.get( 12 ).getDomainId().equals( "H" ) ) {
                 return false;
             }
             if ( sorted.get( 12 ).getNumber() != 3 ) {
                 return false;
             }
-            if ( !sorted.get( 13 ).getDomainId().getId().equals( "H7" ) ) {
+            if ( !sorted.get( 13 ).getDomainId().equals( "H7" ) ) {
                 return false;
             }
             if ( sorted.get( 13 ).getNumber() != 5 ) {
                 return false;
             }
-            if ( !sorted.get( 14 ).getDomainId().getId().equals( "H7" ) ) {
+            if ( !sorted.get( 14 ).getDomainId().equals( "H7" ) ) {
                 return false;
             }
             if ( sorted.get( 14 ).getNumber() != 5 ) {
                 return false;
             }
-            if ( !sorted.get( 15 ).getDomainId().getId().equals( "H7" ) ) {
+            if ( !sorted.get( 15 ).getDomainId().equals( "H7" ) ) {
                 return false;
             }
             if ( sorted.get( 15 ).getNumber() != 5 ) {
@@ -4565,7 +4170,7 @@ public class TestSurfacing {
             }
             // To check if sorting is stable [as claimed by Sun for
             // Collections.sort( List )]
-            if ( !sorted.get( 16 ).getDomainId().getId().equals( "H7" ) ) {
+            if ( !sorted.get( 16 ).getDomainId().equals( "H7" ) ) {
                 return false;
             }
             if ( sorted.get( 16 ).getNumber() != 5 ) {
@@ -4582,105 +4187,6 @@ public class TestSurfacing {
         return true;
     }
 
-    private static boolean testEngulfingOverlapRemoval() {
-        try {
-            final Domain d0 = new BasicDomain( "d0", 0, 8, ( short ) 1, ( short ) 1, 0.1, 1 );
-            final Domain d1 = new BasicDomain( "d1", 0, 1, ( short ) 1, ( short ) 1, 0.1, 1 );
-            final Domain d2 = new BasicDomain( "d2", 0, 2, ( short ) 1, ( short ) 1, 0.1, 1 );
-            final Domain d3 = new BasicDomain( "d3", 7, 8, ( short ) 1, ( short ) 1, 0.1, 1 );
-            final Domain d4 = new BasicDomain( "d4", 7, 9, ( short ) 1, ( short ) 1, 0.1, 1 );
-            final Domain d5 = new BasicDomain( "d4", 0, 9, ( short ) 1, ( short ) 1, 0.1, 1 );
-            final Domain d6 = new BasicDomain( "d4", 4, 5, ( short ) 1, ( short ) 1, 0.1, 1 );
-            final List<Boolean> covered = new ArrayList<Boolean>();
-            covered.add( true ); // 0
-            covered.add( false ); // 1
-            covered.add( true ); // 2
-            covered.add( false ); // 3
-            covered.add( true ); // 4
-            covered.add( true ); // 5
-            covered.add( false ); // 6
-            covered.add( true ); // 7
-            covered.add( true ); // 8
-            if ( SurfacingUtil.isEngulfed( d0, covered ) ) {
-                return false;
-            }
-            if ( SurfacingUtil.isEngulfed( d1, covered ) ) {
-                return false;
-            }
-            if ( SurfacingUtil.isEngulfed( d2, covered ) ) {
-                return false;
-            }
-            if ( !SurfacingUtil.isEngulfed( d3, covered ) ) {
-                return false;
-            }
-            if ( SurfacingUtil.isEngulfed( d4, covered ) ) {
-                return false;
-            }
-            if ( SurfacingUtil.isEngulfed( d5, covered ) ) {
-                return false;
-            }
-            if ( !SurfacingUtil.isEngulfed( d6, covered ) ) {
-                return false;
-            }
-            final Domain a = new BasicDomain( "a", 0, 10, ( short ) 1, ( short ) 1, 0.1, 1 );
-            final Domain b = new BasicDomain( "b", 8, 20, ( short ) 1, ( short ) 1, 0.2, 1 );
-            final Domain c = new BasicDomain( "c", 15, 16, ( short ) 1, ( short ) 1, 0.3, 1 );
-            final Protein abc = new BasicProtein( "abc", "nemve", 0 );
-            abc.addProteinDomain( a );
-            abc.addProteinDomain( b );
-            abc.addProteinDomain( c );
-            final Protein abc_r1 = SurfacingUtil.removeOverlappingDomains( 3, false, abc );
-            final Protein abc_r2 = SurfacingUtil.removeOverlappingDomains( 3, true, abc );
-            if ( abc.getNumberOfProteinDomains() != 3 ) {
-                return false;
-            }
-            if ( abc_r1.getNumberOfProteinDomains() != 3 ) {
-                return false;
-            }
-            if ( abc_r2.getNumberOfProteinDomains() != 2 ) {
-                return false;
-            }
-            if ( !abc_r2.getProteinDomain( 0 ).getDomainId().getId().equals( "a" ) ) {
-                return false;
-            }
-            if ( !abc_r2.getProteinDomain( 1 ).getDomainId().getId().equals( "b" ) ) {
-                return false;
-            }
-            final Domain d = new BasicDomain( "d", 0, 10, ( short ) 1, ( short ) 1, 0.1, 1 );
-            final Domain e = new BasicDomain( "e", 8, 20, ( short ) 1, ( short ) 1, 0.3, 1 );
-            final Domain f = new BasicDomain( "f", 15, 16, ( short ) 1, ( short ) 1, 0.2, 1 );
-            final Protein def = new BasicProtein( "def", "nemve", 0 );
-            def.addProteinDomain( d );
-            def.addProteinDomain( e );
-            def.addProteinDomain( f );
-            final Protein def_r1 = SurfacingUtil.removeOverlappingDomains( 5, false, def );
-            final Protein def_r2 = SurfacingUtil.removeOverlappingDomains( 5, true, def );
-            if ( def.getNumberOfProteinDomains() != 3 ) {
-                return false;
-            }
-            if ( def_r1.getNumberOfProteinDomains() != 3 ) {
-                return false;
-            }
-            if ( def_r2.getNumberOfProteinDomains() != 3 ) {
-                return false;
-            }
-            if ( !def_r2.getProteinDomain( 0 ).getDomainId().getId().equals( "d" ) ) {
-                return false;
-            }
-            if ( !def_r2.getProteinDomain( 1 ).getDomainId().getId().equals( "f" ) ) {
-                return false;
-            }
-            if ( !def_r2.getProteinDomain( 2 ).getDomainId().getId().equals( "e" ) ) {
-                return false;
-            }
-        }
-        catch ( final Exception e ) {
-            e.printStackTrace( System.out );
-            return false;
-        }
-        return true;
-    }
-
     private static boolean testGenomeWideCombinableDomains() {
         try {
             final Domain a = new BasicDomain( "a", 23, 25, ( short ) 1, ( short ) 4, 0.1, -12 );
@@ -4730,58 +4236,58 @@ public class TestSurfacing {
                     .createInstance( protein_list_eel, false, new BasicSpecies( "eel" ) );
             final BasicGenomeWideCombinableDomains eel_ignore = BasicGenomeWideCombinableDomains
                     .createInstance( protein_list_eel, true, new BasicSpecies( "eel" ) );
-            if ( !eel_not_ignore.contains( new DomainId( "a" ) ) ) {
+            if ( !eel_not_ignore.contains( "a" ) ) {
                 return false;
             }
-            if ( !eel_not_ignore.contains( new DomainId( "b" ) ) ) {
+            if ( !eel_not_ignore.contains( "b" ) ) {
                 return false;
             }
-            if ( !eel_not_ignore.contains( new DomainId( "c" ) ) ) {
+            if ( !eel_not_ignore.contains( "c" ) ) {
                 return false;
             }
-            if ( !eel_not_ignore.contains( new DomainId( "d" ) ) ) {
+            if ( !eel_not_ignore.contains( "d" ) ) {
                 return false;
             }
-            if ( !eel_not_ignore.contains( new DomainId( "e" ) ) ) {
+            if ( !eel_not_ignore.contains( "e" ) ) {
                 return false;
             }
-            if ( !eel_not_ignore.contains( new DomainId( "f" ) ) ) {
+            if ( !eel_not_ignore.contains( "f" ) ) {
                 return false;
             }
-            if ( !eel_not_ignore.contains( new DomainId( "g" ) ) ) {
+            if ( !eel_not_ignore.contains( "g" ) ) {
                 return false;
             }
-            if ( !eel_not_ignore.contains( new DomainId( "h" ) ) ) {
+            if ( !eel_not_ignore.contains( "h" ) ) {
                 return false;
             }
-            if ( eel_not_ignore.contains( new DomainId( "x" ) ) ) {
+            if ( eel_not_ignore.contains( "x" ) ) {
                 return false;
             }
-            if ( !eel_ignore.contains( new DomainId( "a" ) ) ) {
+            if ( !eel_ignore.contains( "a" ) ) {
                 return false;
             }
-            if ( !eel_ignore.contains( new DomainId( "b" ) ) ) {
+            if ( !eel_ignore.contains( "b" ) ) {
                 return false;
             }
-            if ( !eel_ignore.contains( new DomainId( "c" ) ) ) {
+            if ( !eel_ignore.contains( "c" ) ) {
                 return false;
             }
-            if ( !eel_ignore.contains( new DomainId( "d" ) ) ) {
+            if ( !eel_ignore.contains( "d" ) ) {
                 return false;
             }
-            if ( !eel_ignore.contains( new DomainId( "e" ) ) ) {
+            if ( !eel_ignore.contains( "e" ) ) {
                 return false;
             }
-            if ( !eel_ignore.contains( new DomainId( "f" ) ) ) {
+            if ( !eel_ignore.contains( "f" ) ) {
                 return false;
             }
-            if ( !eel_ignore.contains( new DomainId( "g" ) ) ) {
+            if ( !eel_ignore.contains( "g" ) ) {
                 return false;
             }
-            if ( !eel_ignore.contains( new DomainId( "h" ) ) ) {
+            if ( !eel_ignore.contains( "h" ) ) {
                 return false;
             }
-            if ( eel_ignore.contains( new DomainId( "x" ) ) ) {
+            if ( eel_ignore.contains( "x" ) ) {
                 return false;
             }
             if ( eel_not_ignore.getSize() != 8 ) {
@@ -4790,52 +4296,52 @@ public class TestSurfacing {
             if ( eel_ignore.getSize() != 8 ) {
                 return false;
             }
-            if ( eel_not_ignore.get( new DomainId( "a" ) ).getCombinableDomainsIds().size() != 5 ) {
+            if ( eel_not_ignore.get( "a" ).getCombinableDomainsIds().size() != 5 ) {
                 return false;
             }
-            if ( eel_not_ignore.get( new DomainId( "b" ) ).getCombinableDomainsIds().size() != 4 ) {
+            if ( eel_not_ignore.get( "b" ).getCombinableDomainsIds().size() != 4 ) {
                 return false;
             }
-            if ( eel_not_ignore.get( new DomainId( "c" ) ).getCombinableDomainsIds().size() != 4 ) {
+            if ( eel_not_ignore.get( "c" ).getCombinableDomainsIds().size() != 4 ) {
                 return false;
             }
-            if ( eel_not_ignore.get( new DomainId( "d" ) ).getCombinableDomainsIds().size() != 4 ) {
+            if ( eel_not_ignore.get( "d" ).getCombinableDomainsIds().size() != 4 ) {
                 return false;
             }
-            if ( eel_not_ignore.get( new DomainId( "e" ) ).getCombinableDomainsIds().size() != 6 ) {
+            if ( eel_not_ignore.get( "e" ).getCombinableDomainsIds().size() != 6 ) {
                 return false;
             }
-            if ( eel_not_ignore.get( new DomainId( "f" ) ).getCombinableDomainsIds().size() != 2 ) {
+            if ( eel_not_ignore.get( "f" ).getCombinableDomainsIds().size() != 2 ) {
                 return false;
             }
-            if ( eel_not_ignore.get( new DomainId( "g" ) ).getCombinableDomainsIds().size() != 1 ) {
+            if ( eel_not_ignore.get( "g" ).getCombinableDomainsIds().size() != 1 ) {
                 return false;
             }
-            if ( eel_not_ignore.get( new DomainId( "h" ) ).getCombinableDomainsIds().size() != 1 ) {
+            if ( eel_not_ignore.get( "h" ).getCombinableDomainsIds().size() != 1 ) {
                 return false;
             }
-            if ( eel_ignore.get( new DomainId( "a" ) ).getCombinableDomainsIds().size() != 4 ) {
+            if ( eel_ignore.get( "a" ).getCombinableDomainsIds().size() != 4 ) {
                 return false;
             }
-            if ( eel_ignore.get( new DomainId( "b" ) ).getCombinableDomainsIds().size() != 4 ) {
+            if ( eel_ignore.get( "b" ).getCombinableDomainsIds().size() != 4 ) {
                 return false;
             }
-            if ( eel_ignore.get( new DomainId( "c" ) ).getCombinableDomainsIds().size() != 4 ) {
+            if ( eel_ignore.get( "c" ).getCombinableDomainsIds().size() != 4 ) {
                 return false;
             }
-            if ( eel_ignore.get( new DomainId( "d" ) ).getCombinableDomainsIds().size() != 4 ) {
+            if ( eel_ignore.get( "d" ).getCombinableDomainsIds().size() != 4 ) {
                 return false;
             }
-            if ( eel_ignore.get( new DomainId( "e" ) ).getCombinableDomainsIds().size() != 5 ) {
+            if ( eel_ignore.get( "e" ).getCombinableDomainsIds().size() != 5 ) {
                 return false;
             }
-            if ( eel_ignore.get( new DomainId( "f" ) ).getCombinableDomainsIds().size() != 1 ) {
+            if ( eel_ignore.get( "f" ).getCombinableDomainsIds().size() != 1 ) {
                 return false;
             }
-            if ( eel_ignore.get( new DomainId( "g" ) ).getCombinableDomainsIds().size() != 1 ) {
+            if ( eel_ignore.get( "g" ).getCombinableDomainsIds().size() != 1 ) {
                 return false;
             }
-            if ( eel_ignore.get( new DomainId( "h" ) ).getCombinableDomainsIds().size() != 1 ) {
+            if ( eel_ignore.get( "h" ).getCombinableDomainsIds().size() != 1 ) {
                 return false;
             }
             if ( eel_not_ignore.getAllDomainIds().size() != 8 ) {
@@ -4902,128 +4408,128 @@ public class TestSurfacing {
             if ( bc0.size() != 15 ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "a", "a" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "a", "a" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "a", "b" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "a", "b" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "b", "a" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "b", "a" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "a", "c" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "a", "c" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "a", "d" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "a", "d" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "a", "e" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "a", "e" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "b", "c" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "b", "c" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "b", "d" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "b", "d" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "b", "e" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "b", "e" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "c", "d" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "c", "d" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "c", "e" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "c", "e" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "d", "e" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "d", "e" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "e", "f" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "e", "f" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "e", "e" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "e", "e" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "f", "f" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "f", "f" ) ) ) {
                 return false;
             }
-            if ( !bc0.contains( new BasicBinaryDomainCombination( "g", "h" ) ) ) {
+            if ( !bc0.contains( BasicBinaryDomainCombination.obtainInstance( "g", "h" ) ) ) {
                 return false;
             }
-            if ( bc0.contains( new BasicBinaryDomainCombination( "f", "a" ) ) ) {
+            if ( bc0.contains( BasicBinaryDomainCombination.obtainInstance( "f", "a" ) ) ) {
                 return false;
             }
-            if ( bc0.contains( new BasicBinaryDomainCombination( "f", "b" ) ) ) {
+            if ( bc0.contains( BasicBinaryDomainCombination.obtainInstance( "f", "b" ) ) ) {
                 return false;
             }
-            if ( bc0.contains( new BasicBinaryDomainCombination( "a", "h" ) ) ) {
+            if ( bc0.contains( BasicBinaryDomainCombination.obtainInstance( "a", "h" ) ) ) {
                 return false;
             }
-            if ( bc0.contains( new BasicBinaryDomainCombination( "a", "g" ) ) ) {
+            if ( bc0.contains( BasicBinaryDomainCombination.obtainInstance( "a", "g" ) ) ) {
                 return false;
             }
             final SortedSet<BinaryDomainCombination> bc1 = eel_ignore.toBinaryDomainCombinations();
             if ( bc1.size() != 12 ) {
                 return false;
             }
-            if ( bc1.contains( new BasicBinaryDomainCombination( "a", "a" ) ) ) {
+            if ( bc1.contains( BasicBinaryDomainCombination.obtainInstance( "a", "a" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "a", "b" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "a", "b" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "b", "a" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "b", "a" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "a", "c" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "a", "c" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "a", "d" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "a", "d" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "a", "e" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "a", "e" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "b", "c" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "b", "c" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "b", "d" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "b", "d" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "b", "e" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "b", "e" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "c", "d" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "c", "d" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "c", "e" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "c", "e" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "d", "e" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "d", "e" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "e", "f" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "e", "f" ) ) ) {
                 return false;
             }
-            if ( !bc1.contains( new BasicBinaryDomainCombination( "g", "h" ) ) ) {
+            if ( !bc1.contains( BasicBinaryDomainCombination.obtainInstance( "g", "h" ) ) ) {
                 return false;
             }
-            if ( bc1.contains( new BasicBinaryDomainCombination( "e", "e" ) ) ) {
+            if ( bc1.contains( BasicBinaryDomainCombination.obtainInstance( "e", "e" ) ) ) {
                 return false;
             }
-            if ( bc1.contains( new BasicBinaryDomainCombination( "f", "f" ) ) ) {
+            if ( bc1.contains( BasicBinaryDomainCombination.obtainInstance( "f", "f" ) ) ) {
                 return false;
             }
-            if ( bc1.contains( new BasicBinaryDomainCombination( "f", "a" ) ) ) {
+            if ( bc1.contains( BasicBinaryDomainCombination.obtainInstance( "f", "a" ) ) ) {
                 return false;
             }
-            if ( bc1.contains( new BasicBinaryDomainCombination( "f", "b" ) ) ) {
+            if ( bc1.contains( BasicBinaryDomainCombination.obtainInstance( "f", "b" ) ) ) {
                 return false;
             }
-            if ( bc1.contains( new BasicBinaryDomainCombination( "a", "g" ) ) ) {
+            if ( bc1.contains( BasicBinaryDomainCombination.obtainInstance( "a", "g" ) ) ) {
                 return false;
             }
-            if ( bc1.contains( new BasicBinaryDomainCombination( "b", "g" ) ) ) {
+            if ( bc1.contains( BasicBinaryDomainCombination.obtainInstance( "b", "g" ) ) ) {
                 return false;
             }
         }
@@ -5037,7 +4543,7 @@ public class TestSurfacing {
     private static boolean testHmmPfamOutputParser( final File test_dir ) {
         try {
             final HmmPfamOutputParser parser = new HmmPfamOutputParser( new File( test_dir
-                    + ForesterUtil.getFileSeparator() + "hmmpfam_output" ), "human", "ls" );
+                                                                                  + ForesterUtil.getFileSeparator() + "hmmpfam_output" ), "human", "ls" );
             parser.setEValueMaximum( 0.2 );
             parser.setIgnoreDufs( true );
             parser.setReturnType( HmmPfamOutputParser.ReturnType.UNORDERED_PROTEIN_DOMAIN_COLLECTION_PER_PROTEIN );
@@ -5079,9 +4585,9 @@ public class TestSurfacing {
                     .equals( "pep:known chromosome:NCBI36:21:16024215:16174248:1 gene:ENSG00000155313 transcript:ENST00000285681" ) ) {
                 return false;
             }
-            final List<Domain> uba = pdc.getProteinDomains( new DomainId( "UBA" ) );
-            final List<Domain> uim = pdc.getProteinDomains( new DomainId( "UIM" ) );
-            final List<Domain> uch = pdc.getProteinDomains( new DomainId( "UCH" ) );
+            final List<Domain> uba = pdc.getProteinDomains( "UBA" );
+            final List<Domain> uim = pdc.getProteinDomains( "UIM" );
+            final List<Domain> uch = pdc.getProteinDomains( "UCH" );
             if ( uba.size() != 1 ) {
                 return false;
             }
@@ -5092,14 +4598,14 @@ public class TestSurfacing {
                 return false;
             }
             final BasicDomain uim_domain = ( BasicDomain ) uim.get( 1 );
-            if ( !uim_domain.getDomainId().equals( new DomainId( "UIM" ) ) ) {
+            if ( !uim_domain.getDomainId().equals( "UIM" ) ) {
                 return false;
             }
             if ( uim_domain.getTotalCount() != 2 ) {
                 return false;
             }
             final BasicDomain uba_domain = ( BasicDomain ) uba.get( 0 );
-            if ( !uba_domain.getDomainId().equals( new DomainId( "UBA" ) ) ) {
+            if ( !uba_domain.getDomainId().equals( "UBA" ) ) {
                 return false;
             }
             if ( uba_domain.getNumber() != 1 ) {
@@ -5114,14 +4620,8 @@ public class TestSurfacing {
             if ( uba_domain.getTo() != 57 ) {
                 return false;
             }
-            if ( !Test.isEqual( uba_domain.getPerSequenceEvalue(), 0.00084 ) ) {
-                return false;
-            }
-            if ( !Test.isEqual( uba_domain.getPerSequenceScore(), 23.2 ) ) {
-                return false;
-            }
             final HmmPfamOutputParser parser2 = new HmmPfamOutputParser( new File( test_dir
-                    + ForesterUtil.getFileSeparator() + "hmmpfam_output_short" ), "human", "ls" );
+                                                                                   + ForesterUtil.getFileSeparator() + "hmmpfam_output_short" ), "human", "ls" );
             parser2.setEValueMaximum( 0.2 );
             parser2.setIgnoreDufs( true );
             parser2.setReturnType( HmmPfamOutputParser.ReturnType.UNORDERED_PROTEIN_DOMAIN_COLLECTION_PER_PROTEIN );
@@ -5166,9 +4666,9 @@ public class TestSurfacing {
             if ( pdc2.getNumberOfProteinDomains() != 3 ) {
                 return false;
             }
-            final List<Domain> uba2 = pdc2.getProteinDomains( new DomainId( "UBA" ) );
-            final List<Domain> uim2 = pdc2.getProteinDomains( new DomainId( "UIM" ) );
-            final List<Domain> uch2 = pdc2.getProteinDomains( new DomainId( "UCH" ) );
+            final List<Domain> uba2 = pdc2.getProteinDomains( "UBA" );
+            final List<Domain> uim2 = pdc2.getProteinDomains( "UIM" );
+            final List<Domain> uch2 = pdc2.getProteinDomains( "UCH" );
             if ( uba2.size() != 1 ) {
                 return false;
             }
@@ -5179,14 +4679,14 @@ public class TestSurfacing {
                 return false;
             }
             final BasicDomain uim_domain2 = ( BasicDomain ) uim2.get( 1 );
-            if ( !uim_domain2.getDomainId().getId().equals( "UIM" ) ) {
+            if ( !uim_domain2.getDomainId().equals( "UIM" ) ) {
                 return false;
             }
             if ( uim_domain2.getTotalCount() != 2 ) {
                 return false;
             }
             final BasicDomain uba_domain2 = ( BasicDomain ) uba2.get( 0 );
-            if ( !uba_domain2.getDomainId().getId().equals( "UBA" ) ) {
+            if ( !uba_domain2.getDomainId().equals( "UBA" ) ) {
                 return false;
             }
             if ( uba_domain2.getNumber() != 1 ) {
@@ -5201,9 +4701,6 @@ public class TestSurfacing {
             if ( uba_domain2.getTo() != 57 ) {
                 return false;
             }
-            if ( !Test.isEqual( uba_domain2.getPerSequenceEvalue(), 0.00084 ) ) {
-                return false;
-            }
         }
         catch ( final Exception e ) {
             e.printStackTrace( System.out );
@@ -5215,7 +4712,7 @@ public class TestSurfacing {
     private static boolean testHmmPfamOutputParserWithFilter( final File test_dir ) {
         try {
             HmmPfamOutputParser parser = new HmmPfamOutputParser( new File( test_dir + ForesterUtil.getFileSeparator()
-                    + "hmmpfam_output3" ), "human", "ls" );
+                                                                            + "hmmpfam_output3" ), "human", "ls" );
             parser.setEValueMaximum( 0.2 );
             parser.setIgnoreDufs( true );
             parser.setReturnType( HmmPfamOutputParser.ReturnType.UNORDERED_PROTEIN_DOMAIN_COLLECTION_PER_PROTEIN );
@@ -5228,12 +4725,11 @@ public class TestSurfacing {
                 return false;
             }
             //
-            Set<DomainId> filter = new TreeSet<DomainId>();
-            filter.add( new DomainId( "beauty" ) );
-            filter.add( new DomainId( "strange" ) );
+            Set<String> filter = new TreeSet<String>();
+            filter.add( "beauty" );
+            filter.add( "strange" );
             parser = new HmmPfamOutputParser( new File( test_dir + ForesterUtil.getFileSeparator() + "hmmpfam_output3" ),
                                               "human",
-                                              "ls",
                                               filter,
                                               HmmPfamOutputParser.FilterType.NEGATIVE_PROTEIN );
             parser.setEValueMaximum( 0.2 );
@@ -5248,12 +4744,11 @@ public class TestSurfacing {
                 return false;
             }
             //
-            filter = new TreeSet<DomainId>();
-            filter.add( new DomainId( "beauty" ) );
-            filter.add( new DomainId( "strange" ) );
+            filter = new TreeSet<String>();
+            filter.add( "beauty" );
+            filter.add( "strange" );
             parser = new HmmPfamOutputParser( new File( test_dir + ForesterUtil.getFileSeparator() + "hmmpfam_output3" ),
                                               "human",
-                                              "ls",
                                               filter,
                                               HmmPfamOutputParser.FilterType.POSITIVE_PROTEIN );
             parser.setEValueMaximum( 0.2 );
@@ -5268,13 +4763,12 @@ public class TestSurfacing {
                 return false;
             }
             //
-            filter = new TreeSet<DomainId>();
-            filter.add( new DomainId( "UIM" ) );
-            filter.add( new DomainId( "A" ) );
-            filter.add( new DomainId( "C" ) );
+            filter = new TreeSet<String>();
+            filter.add( "UIM" );
+            filter.add( "A" );
+            filter.add( "C" );
             parser = new HmmPfamOutputParser( new File( test_dir + ForesterUtil.getFileSeparator() + "hmmpfam_output3" ),
                                               "human",
-                                              "ls",
                                               filter,
                                               HmmPfamOutputParser.FilterType.POSITIVE_PROTEIN );
             parser.setEValueMaximum( 0.2 );
@@ -5289,14 +4783,13 @@ public class TestSurfacing {
                 return false;
             }
             //
-            filter = new TreeSet<DomainId>();
-            filter.add( new DomainId( "UIM" ) );
-            filter.add( new DomainId( "A" ) );
-            filter.add( new DomainId( "C" ) );
-            filter.add( new DomainId( "X" ) );
+            filter = new TreeSet<String>();
+            filter.add( "UIM" );
+            filter.add( "A" );
+            filter.add( "C" );
+            filter.add( "X" );
             parser = new HmmPfamOutputParser( new File( test_dir + ForesterUtil.getFileSeparator() + "hmmpfam_output3" ),
                                               "human",
-                                              "ls",
                                               filter,
                                               HmmPfamOutputParser.FilterType.NEGATIVE_DOMAIN );
             parser.setEValueMaximum( 0.2 );
@@ -5311,13 +4804,12 @@ public class TestSurfacing {
                 return false;
             }
             //
-            filter = new TreeSet<DomainId>();
-            filter.add( new DomainId( "UIM" ) );
-            filter.add( new DomainId( "A" ) );
-            filter.add( new DomainId( "C" ) );
+            filter = new TreeSet<String>();
+            filter.add( "UIM" );
+            filter.add( "A" );
+            filter.add( "C" );
             parser = new HmmPfamOutputParser( new File( test_dir + ForesterUtil.getFileSeparator() + "hmmpfam_output3" ),
                                               "human",
-                                              "ls",
                                               filter,
                                               HmmPfamOutputParser.FilterType.NEGATIVE_PROTEIN );
             parser.setEValueMaximum( 0.2 );
@@ -5332,11 +4824,10 @@ public class TestSurfacing {
                 return false;
             }
             //
-            filter = new TreeSet<DomainId>();
-            filter.add( new DomainId( "UIM" ) );
+            filter = new TreeSet<String>();
+            filter.add( "UIM" );
             parser = new HmmPfamOutputParser( new File( test_dir + ForesterUtil.getFileSeparator() + "hmmpfam_output3" ),
                                               "human",
-                                              "ls",
                                               filter,
                                               HmmPfamOutputParser.FilterType.NEGATIVE_PROTEIN );
             parser.setEValueMaximum( 0.2 );
@@ -5354,11 +4845,10 @@ public class TestSurfacing {
                 return false;
             }
             //
-            filter = new TreeSet<DomainId>();
-            filter.add( new DomainId( "UIM" ) );
+            filter = new TreeSet<String>();
+            filter.add( "UIM" );
             parser = new HmmPfamOutputParser( new File( test_dir + ForesterUtil.getFileSeparator() + "hmmpfam_output3" ),
                                               "human",
-                                              "ls",
                                               filter,
                                               HmmPfamOutputParser.FilterType.POSITIVE_PROTEIN );
             parser.setEValueMaximum( 0.2 );
@@ -5376,12 +4866,11 @@ public class TestSurfacing {
                 return false;
             }
             //
-            filter = new TreeSet<DomainId>();
-            filter.add( new DomainId( "A" ) );
-            filter.add( new DomainId( "C" ) );
+            filter = new TreeSet<String>();
+            filter.add( "A" );
+            filter.add( "C" );
             parser = new HmmPfamOutputParser( new File( test_dir + ForesterUtil.getFileSeparator() + "hmmpfam_output3" ),
                                               "human",
-                                              "ls",
                                               filter,
                                               HmmPfamOutputParser.FilterType.POSITIVE_PROTEIN );
             parser.setEValueMaximum( 0.2 );
@@ -5412,160 +4901,6 @@ public class TestSurfacing {
         return true;
     }
 
-    private static boolean testOverlapRemoval() {
-        try {
-            final Domain d0 = new BasicDomain( "d0", ( short ) 2, ( short ) 5, ( short ) 1, ( short ) 1, 0.1, 1 );
-            final Domain d1 = new BasicDomain( "d1", ( short ) 7, ( short ) 10, ( short ) 1, ( short ) 1, 0.1, 1 );
-            final Domain d2 = new BasicDomain( "d2", ( short ) 0, ( short ) 20, ( short ) 1, ( short ) 1, 0.1, 1 );
-            final Domain d3 = new BasicDomain( "d3", ( short ) 9, ( short ) 10, ( short ) 1, ( short ) 1, 0.1, 1 );
-            final Domain d4 = new BasicDomain( "d4", ( short ) 7, ( short ) 8, ( short ) 1, ( short ) 1, 0.1, 1 );
-            final List<Boolean> covered = new ArrayList<Boolean>();
-            covered.add( true ); // 0
-            covered.add( false ); // 1
-            covered.add( true ); // 2
-            covered.add( false ); // 3
-            covered.add( true ); // 4
-            covered.add( true ); // 5
-            covered.add( false ); // 6
-            covered.add( true ); // 7
-            covered.add( true ); // 8
-            if ( SurfacingUtil.calculateOverlap( d0, covered ) != 3 ) {
-                return false;
-            }
-            if ( SurfacingUtil.calculateOverlap( d1, covered ) != 2 ) {
-                return false;
-            }
-            if ( SurfacingUtil.calculateOverlap( d2, covered ) != 6 ) {
-                return false;
-            }
-            if ( SurfacingUtil.calculateOverlap( d3, covered ) != 0 ) {
-                return false;
-            }
-            if ( SurfacingUtil.calculateOverlap( d4, covered ) != 2 ) {
-                return false;
-            }
-            final Domain a = new BasicDomain( "a", ( short ) 2, ( short ) 5, ( short ) 1, ( short ) 1, 0.01, 1 );
-            final Domain b = new BasicDomain( "b", ( short ) 2, ( short ) 10, ( short ) 1, ( short ) 1, 0.1, 1 );
-            final Protein ab = new BasicProtein( "ab", "varanus", 0 );
-            ab.addProteinDomain( a );
-            ab.addProteinDomain( b );
-            final Protein ab_s0 = SurfacingUtil.removeOverlappingDomains( 3, false, ab );
-            if ( ab.getNumberOfProteinDomains() != 2 ) {
-                return false;
-            }
-            if ( ab_s0.getNumberOfProteinDomains() != 1 ) {
-                return false;
-            }
-            if ( !ab_s0.getProteinDomain( 0 ).getDomainId().getId().equals( "a" ) ) {
-                return false;
-            }
-            final Protein ab_s1 = SurfacingUtil.removeOverlappingDomains( 4, false, ab );
-            if ( ab.getNumberOfProteinDomains() != 2 ) {
-                return false;
-            }
-            if ( ab_s1.getNumberOfProteinDomains() != 2 ) {
-                return false;
-            }
-            final Domain c = new BasicDomain( "c", ( short ) 20000, ( short ) 20500, ( short ) 1, ( short ) 1, 10, 1 );
-            final Domain d = new BasicDomain( "d",
-                                              ( short ) 10000,
-                                              ( short ) 10500,
-                                              ( short ) 1,
-                                              ( short ) 1,
-                                              0.0000001,
-                                              1 );
-            final Domain e = new BasicDomain( "e", ( short ) 5000, ( short ) 5500, ( short ) 1, ( short ) 1, 0.0001, 1 );
-            final Protein cde = new BasicProtein( "cde", "varanus", 0 );
-            cde.addProteinDomain( c );
-            cde.addProteinDomain( d );
-            cde.addProteinDomain( e );
-            final Protein cde_s0 = SurfacingUtil.removeOverlappingDomains( 0, false, cde );
-            if ( cde.getNumberOfProteinDomains() != 3 ) {
-                return false;
-            }
-            if ( cde_s0.getNumberOfProteinDomains() != 3 ) {
-                return false;
-            }
-            final Domain f = new BasicDomain( "f", ( short ) 10, ( short ) 20, ( short ) 1, ( short ) 1, 10, 1 );
-            final Domain g = new BasicDomain( "g", ( short ) 10, ( short ) 20, ( short ) 1, ( short ) 1, 0.01, 1 );
-            final Domain h = new BasicDomain( "h", ( short ) 10, ( short ) 20, ( short ) 1, ( short ) 1, 0.0001, 1 );
-            final Domain i = new BasicDomain( "i", ( short ) 10, ( short ) 20, ( short ) 1, ( short ) 1, 0.5, 1 );
-            final Domain i2 = new BasicDomain( "i", ( short ) 5, ( short ) 30, ( short ) 1, ( short ) 1, 0.5, 10 );
-            final Protein fghi = new BasicProtein( "fghi", "varanus", 0 );
-            fghi.addProteinDomain( f );
-            fghi.addProteinDomain( g );
-            fghi.addProteinDomain( h );
-            fghi.addProteinDomain( i );
-            fghi.addProteinDomain( i );
-            fghi.addProteinDomain( i );
-            fghi.addProteinDomain( i2 );
-            final Protein fghi_s0 = SurfacingUtil.removeOverlappingDomains( 10, false, fghi );
-            if ( fghi.getNumberOfProteinDomains() != 7 ) {
-                return false;
-            }
-            if ( fghi_s0.getNumberOfProteinDomains() != 1 ) {
-                return false;
-            }
-            if ( !fghi_s0.getProteinDomain( 0 ).getDomainId().getId().equals( "h" ) ) {
-                return false;
-            }
-            final Protein fghi_s1 = SurfacingUtil.removeOverlappingDomains( 11, false, fghi );
-            if ( fghi.getNumberOfProteinDomains() != 7 ) {
-                return false;
-            }
-            if ( fghi_s1.getNumberOfProteinDomains() != 7 ) {
-                return false;
-            }
-            final Domain j = new BasicDomain( "j", ( short ) 10, ( short ) 20, ( short ) 1, ( short ) 1, 10, 1 );
-            final Domain k = new BasicDomain( "k", ( short ) 10, ( short ) 20, ( short ) 1, ( short ) 1, 0.01, 1 );
-            final Domain l = new BasicDomain( "l", ( short ) 10, ( short ) 20, ( short ) 1, ( short ) 1, 0.0001, 1 );
-            final Domain m = new BasicDomain( "m", ( short ) 10, ( short ) 20, ( short ) 1, ( short ) 4, 0.5, 1 );
-            final Domain m0 = new BasicDomain( "m", ( short ) 10, ( short ) 20, ( short ) 2, ( short ) 4, 0.5, 1 );
-            final Domain m1 = new BasicDomain( "m", ( short ) 10, ( short ) 20, ( short ) 3, ( short ) 4, 0.5, 1 );
-            final Domain m2 = new BasicDomain( "m", ( short ) 5, ( short ) 30, ( short ) 4, ( short ) 4, 0.5, 10 );
-            final Protein jklm = new BasicProtein( "jklm", "varanus", 0 );
-            jklm.addProteinDomain( j );
-            jklm.addProteinDomain( k );
-            jklm.addProteinDomain( l );
-            jklm.addProteinDomain( m );
-            jklm.addProteinDomain( m0 );
-            jklm.addProteinDomain( m1 );
-            jklm.addProteinDomain( m2 );
-            final Protein jklm_s0 = SurfacingUtil.removeOverlappingDomains( 10, false, jklm );
-            if ( jklm.getNumberOfProteinDomains() != 7 ) {
-                return false;
-            }
-            if ( jklm_s0.getNumberOfProteinDomains() != 1 ) {
-                return false;
-            }
-            if ( !jklm_s0.getProteinDomain( 0 ).getDomainId().getId().equals( "l" ) ) {
-                return false;
-            }
-            final Protein jklm_s1 = SurfacingUtil.removeOverlappingDomains( 11, false, jklm );
-            if ( jklm.getNumberOfProteinDomains() != 7 ) {
-                return false;
-            }
-            if ( jklm_s1.getNumberOfProteinDomains() != 7 ) {
-                return false;
-            }
-            final Domain only = new BasicDomain( "only", ( short ) 5, ( short ) 30, ( short ) 4, ( short ) 4, 0.5, 10 );
-            final Protein od = new BasicProtein( "od", "varanus", 0 );
-            od.addProteinDomain( only );
-            final Protein od_s0 = SurfacingUtil.removeOverlappingDomains( 0, false, od );
-            if ( od.getNumberOfProteinDomains() != 1 ) {
-                return false;
-            }
-            if ( od_s0.getNumberOfProteinDomains() != 1 ) {
-                return false;
-            }
-        }
-        catch ( final Exception e ) {
-            e.printStackTrace( System.out );
-            return false;
-        }
-        return true;
-    }
-
     private static boolean testParsimony() {
         try {
             final BinaryStates X = BinaryStates.PRESENT;
@@ -5973,7 +5308,7 @@ public class TestSurfacing {
             gwcd_list.add( two );
             gwcd_list.add( three );
             gwcd_list.add( four );
-            final Map<DomainId, Set<String>> map_same = new HashMap<DomainId, Set<String>>();
+            final Map<String, Set<String>> map_same = new HashMap<String, Set<String>>();
             final HashSet<String> a_s = new HashSet<String>();
             a_s.add( "AAA" );
             final HashSet<String> b_s = new HashSet<String>();
@@ -6091,199 +5426,5 @@ public class TestSurfacing {
         return true;
     }
 
-    private static boolean testPaupLogParser( final File test_dir ) {
-        try {
-            final PaupLogParser parser = new PaupLogParser();
-            parser.setSource( new File( test_dir + ForesterUtil.getFileSeparator() + "paup_log_test_1" ) );
-            final CharacterStateMatrix<BinaryStates> matrix = parser.parse();
-            if ( matrix.getNumberOfIdentifiers() != 8 ) {
-                return false;
-            }
-            if ( !matrix.getIdentifier( 0 ).equals( "MOUSE" ) ) {
-                return false;
-            }
-            if ( !matrix.getIdentifier( 1 ).equals( "NEMVE" ) ) {
-                return false;
-            }
-            if ( !matrix.getIdentifier( 2 ).equals( "MONBE" ) ) {
-                return false;
-            }
-            if ( !matrix.getIdentifier( 3 ).equals( "DICDI" ) ) {
-                return false;
-            }
-            if ( !matrix.getIdentifier( 4 ).equals( "ARATH" ) ) {
-                return false;
-            }
-            if ( !matrix.getIdentifier( 5 ).equals( "6" ) ) {
-                return false;
-            }
-            if ( !matrix.getIdentifier( 6 ).equals( "7" ) ) {
-                return false;
-            }
-            if ( !matrix.getIdentifier( 7 ).equals( "8" ) ) {
-                return false;
-            }
-            if ( matrix.getNumberOfCharacters() != ( 66 + 66 + 28 ) ) {
-                return false;
-            }
-            if ( matrix.getState( 0, 4 ) != BinaryStates.ABSENT ) {
-                return false;
-            }
-            if ( matrix.getState( 0, 5 ) != BinaryStates.PRESENT ) {
-                return false;
-            }
-            if ( matrix.getState( 1, 5 ) != BinaryStates.PRESENT ) {
-                return false;
-            }
-            if ( matrix.getState( 7, 154 ) != BinaryStates.ABSENT ) {
-                return false;
-            }
-            if ( matrix.getState( 7, 155 ) != BinaryStates.PRESENT ) {
-                return false;
-            }
-            if ( matrix.getState( 7, 156 ) != BinaryStates.PRESENT ) {
-                return false;
-            }
-            if ( matrix.getState( 7, 157 ) != BinaryStates.ABSENT ) {
-                return false;
-            }
-            if ( matrix.getState( 7, 158 ) != BinaryStates.PRESENT ) {
-                return false;
-            }
-            if ( matrix.getState( 7, 159 ) != BinaryStates.ABSENT ) {
-                return false;
-            }
-        }
-        catch ( final Exception e ) {
-            e.printStackTrace( System.out );
-            return false;
-        }
-        return true;
-    }
-
-    private static boolean testProteinId() {
-        try {
-            final ProteinId id1 = new ProteinId( "a" );
-            final ProteinId id2 = new ProteinId( "a" );
-            final ProteinId id3 = new ProteinId( "A" );
-            final ProteinId id4 = new ProteinId( "b" );
-            if ( !id1.equals( id1 ) ) {
-                return false;
-            }
-            if ( id1.getId().equals( "x" ) ) {
-                return false;
-            }
-            if ( id1.getId().equals( null ) ) {
-                return false;
-            }
-            if ( !id1.equals( id2 ) ) {
-                return false;
-            }
-            if ( id1.equals( id3 ) ) {
-                return false;
-            }
-            if ( id1.hashCode() != id1.hashCode() ) {
-                return false;
-            }
-            if ( id1.hashCode() != id2.hashCode() ) {
-                return false;
-            }
-            if ( id1.hashCode() == id3.hashCode() ) {
-                return false;
-            }
-            if ( id1.compareTo( id1 ) != 0 ) {
-                return false;
-            }
-            if ( id1.compareTo( id2 ) != 0 ) {
-                return false;
-            }
-            if ( id1.compareTo( id3 ) != 0 ) {
-                return false;
-            }
-            if ( id1.compareTo( id4 ) >= 0 ) {
-                return false;
-            }
-            if ( id4.compareTo( id1 ) <= 0 ) {
-                return false;
-            }
-            if ( !id4.getId().equals( "b" ) ) {
-                return false;
-            }
-            final ProteinId id5 = new ProteinId( " C " );
-            if ( !id5.getId().equals( "C" ) ) {
-                return false;
-            }
-            if ( id5.equals( id1 ) ) {
-                return false;
-            }
-        }
-        catch ( final Exception e ) {
-            e.printStackTrace( System.out );
-            return false;
-        }
-        return true;
-    }
-
-    private static boolean testSpecies() {
-        try {
-            final Species s1 = new BasicSpecies( "a" );
-            final Species s2 = new BasicSpecies( "a" );
-            final Species s3 = new BasicSpecies( "A" );
-            final Species s4 = new BasicSpecies( "b" );
-            if ( !s1.equals( s1 ) ) {
-                return false;
-            }
-            if ( s1.getSpeciesId().equals( "x" ) ) {
-                return false;
-            }
-            if ( s1.getSpeciesId().equals( null ) ) {
-                return false;
-            }
-            if ( !s1.equals( s2 ) ) {
-                return false;
-            }
-            if ( s1.equals( s3 ) ) {
-                return false;
-            }
-            if ( s1.hashCode() != s1.hashCode() ) {
-                return false;
-            }
-            if ( s1.hashCode() != s2.hashCode() ) {
-                return false;
-            }
-            if ( s1.hashCode() == s3.hashCode() ) {
-                return false;
-            }
-            if ( s1.compareTo( s1 ) != 0 ) {
-                return false;
-            }
-            if ( s1.compareTo( s2 ) != 0 ) {
-                return false;
-            }
-            if ( s1.compareTo( s3 ) != 0 ) {
-                return false;
-            }
-            if ( s1.compareTo( s4 ) >= 0 ) {
-                return false;
-            }
-            if ( s4.compareTo( s1 ) <= 0 ) {
-                return false;
-            }
-            if ( !s4.getSpeciesId().equals( "b" ) ) {
-                return false;
-            }
-            final Species s5 = new BasicSpecies( " C " );
-            if ( !s5.getSpeciesId().equals( "C" ) ) {
-                return false;
-            }
-            if ( s5.equals( s1 ) ) {
-                return false;
-            }
-        }
-        catch ( final Exception e ) {
-            e.printStackTrace( System.out );
-            return false;
-        }
-        return true;
-    }
+   
 }