remove reference to spac in readme
diff --git a/.gitignore b/.gitignore
index 2443c87..473372b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@
 sampleData/*/*Output*
 output
 tmp/
+archive
diff --git a/readme.txt b/readme.txt
index e0dbfee..ea8efa0 100644
--- a/readme.txt
+++ b/readme.txt
@@ -10,6 +10,3 @@
 * chmod a+x *sh

 * ./run_uwc_devel.sh

 

-For more info, please see:

-

-https://studio.plugins.atlassian.com/wiki/display/UWC/Universal+Wiki+Converter

diff --git a/src/com/atlassian/uwc/converters/dokuwiki/HierarchyLinkConverterTest.java b/src/com/atlassian/uwc/converters/dokuwiki/HierarchyLinkConverterTest.java
index 53b39a8..ba485d4 100644
--- a/src/com/atlassian/uwc/converters/dokuwiki/HierarchyLinkConverterTest.java
+++ b/src/com/atlassian/uwc/converters/dokuwiki/HierarchyLinkConverterTest.java
@@ -137,6 +137,7 @@
 				"[[ns:tada]]\n" +
 				"[[ns:tada:subchild]]\n" +
 				"[[ns:tada:other:subchild]]\n" +
+				"[[ns:tada:Other:subchild]]\n" +
 				"[[ns:tada:other:sub:subsubchild]]\n");
 		String spacekey = "otherspace";
 		page.setSpacekey(spacekey);//default spacekey is 'food'
@@ -146,6 +147,7 @@
 				"[lala:Tada]\n" +
 				"[lala:Subchild]\n" +
 				"[foo:Subchild]\n" +
+				"[foo:Subchild]\n" +
 				"[foo:Subsubchild]\n"; //this one uses the mapping (drink points to food)
 		assertNotNull(actual);
 		assertEquals(expected, actual);
diff --git a/src/com/atlassian/uwc/converters/dokuwiki/SpaceConverter.java b/src/com/atlassian/uwc/converters/dokuwiki/SpaceConverter.java
index 1d22fed..f3b306d 100644
--- a/src/com/atlassian/uwc/converters/dokuwiki/SpaceConverter.java
+++ b/src/com/atlassian/uwc/converters/dokuwiki/SpaceConverter.java
@@ -43,7 +43,7 @@
 			//remove deepest portion of the path
 			tmppath = removeDeepest(tmppath);
 		}
-		
+		log.debug("spacekey set to: " + page.getSpacekey());
 	}
 	
 	static Pattern filetype = Pattern.compile("[.]\\w+$");
diff --git a/src/com/atlassian/uwc/hierarchies/ContentHierarchyTest.java b/src/com/atlassian/uwc/hierarchies/ContentHierarchyTest.java
index 71564f6..9095c8f 100644
--- a/src/com/atlassian/uwc/hierarchies/ContentHierarchyTest.java
+++ b/src/com/atlassian/uwc/hierarchies/ContentHierarchyTest.java
@@ -4,9 +4,8 @@
 import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
+import java.util.Collection;
 import java.util.Properties;
-import java.util.Set;
 import java.util.Vector;
 
 import junit.framework.TestCase;
@@ -49,13 +48,13 @@
 		assertNull(actual.getParent());
 		assertNotNull(actual.getChildren());
 
-		Set<HierarchyNode> children1 = actual.getChildren();
+		Collection<HierarchyNode> children1 = actual.getChildren();
 		assertEquals(1, children1.size());
 		Vector<HierarchyNode> nodes1 = new Vector<HierarchyNode>();
 		nodes1.addAll(children1);
 		assertTrue((nodes1.get(0)).getName().equals("Plants"));
 
-		Set<HierarchyNode> children2 = (nodes1.get(0)).getChildren();
+		Collection<HierarchyNode> children2 = (nodes1.get(0)).getChildren();
 		assertEquals(2, children2.size());
 		Vector<HierarchyNode> nodes2 = new Vector<HierarchyNode>();
 		nodes2.addAll(children2);
@@ -74,7 +73,7 @@
 			treenode = nodes2.get(1);
 		}
 		
-		Set<HierarchyNode> treechildren = treenode.getChildren();
+		Collection<HierarchyNode> treechildren = treenode.getChildren();
 		assertEquals(2, treechildren.size());
 		Vector<HierarchyNode> trees = new Vector<HierarchyNode>();
 		trees.addAll(treechildren);
@@ -83,7 +82,7 @@
 		assertTrue((trees.get(1)).getName().equals("Chestnut") ||
 				(trees.get(1)).getName().equals("Pine"));
 		
-		Set<HierarchyNode> flowerchildren = flowernode.getChildren();
+		Collection<HierarchyNode> flowerchildren = flowernode.getChildren();
 		assertEquals(3, flowerchildren.size());
 		Vector<HierarchyNode> flowers = new Vector<HierarchyNode>();
 		flowers.addAll(flowerchildren);
@@ -128,19 +127,19 @@
 		assertNull(actual.getParent());
 		assertNotNull(actual.getChildren());
 
-		Set<HierarchyNode> home = actual.getChildren();
+		Collection<HierarchyNode> home = actual.getChildren();
 		assertEquals(1, home.size());
 		Vector<HierarchyNode> nodes0 = new Vector<HierarchyNode>();
 		nodes0.addAll(home);
 		assertTrue((nodes0.get(0)).getName().equals("Home"));
 		
-		Set<HierarchyNode> children1 = nodes0.get(0).getChildren();
+		Collection<HierarchyNode> children1 = nodes0.get(0).getChildren();
 		assertEquals(1, children1.size());
 		Vector<HierarchyNode> nodes1 = new Vector<HierarchyNode>();
 		nodes1.addAll(children1);
 		assertTrue((nodes1.get(0)).getName().equals("Plants"));
 
-		Set<HierarchyNode> children2 = (nodes1.get(0)).getChildren();
+		Collection<HierarchyNode> children2 = (nodes1.get(0)).getChildren();
 		assertEquals(2, children2.size());
 		Vector<HierarchyNode> nodes2 = new Vector<HierarchyNode>();
 		nodes2.addAll(children2);
@@ -159,7 +158,7 @@
 			treenode = nodes2.get(1);
 		}
 		
-		Set<HierarchyNode> treechildren = treenode.getChildren();
+		Collection<HierarchyNode> treechildren = treenode.getChildren();
 		assertEquals(2, treechildren.size());
 		Vector<HierarchyNode> trees = new Vector<HierarchyNode>();
 		trees.addAll(treechildren);
@@ -168,7 +167,7 @@
 		assertTrue((trees.get(1)).getName().equals("Chestnut") ||
 				(trees.get(1)).getName().equals("Pine"));
 		
-		Set<HierarchyNode> flowerchildren = flowernode.getChildren();
+		Collection<HierarchyNode> flowerchildren = flowernode.getChildren();
 		assertEquals(3, flowerchildren.size());
 		Vector<HierarchyNode> flowers = new Vector<HierarchyNode>();
 		flowers.addAll(flowerchildren);
@@ -208,13 +207,13 @@
 		assertNull(actual.getParent());
 		assertNotNull(actual.getChildren());
 
-		Set<HierarchyNode> children1 = actual.getChildren();
+		Collection<HierarchyNode> children1 = actual.getChildren();
 		assertEquals(1, children1.size());
 		Vector<HierarchyNode> nodes1 = new Vector<HierarchyNode>();
 		nodes1.addAll(children1);
 		assertTrue((nodes1.get(0)).getName().equals("Plants"));
 
-		Set<HierarchyNode> children2 = (nodes1.get(0)).getChildren();
+		Collection<HierarchyNode> children2 = (nodes1.get(0)).getChildren();
 		assertEquals(3, children2.size());
 		Vector<HierarchyNode> nodes2 = new Vector<HierarchyNode>();
 		nodes2.addAll(children2);
@@ -232,7 +231,7 @@
 			if (node.getName().equals("Plants_Nuts")) nutnode = node;
 		}
 		
-		Set<HierarchyNode> treechildren = treenode.getChildren();
+		Collection<HierarchyNode> treechildren = treenode.getChildren();
 		assertEquals(2, treechildren.size());
 		Vector<HierarchyNode> trees = new Vector<HierarchyNode>();
 		trees.addAll(treechildren);
@@ -241,7 +240,7 @@
 		assertTrue((trees.get(1)).getName().equals("Plants_Trees_Chestnut") ||
 				(trees.get(1)).getName().equals("Plants_Trees_Pine"));
 		
-		Set<HierarchyNode> flowerchildren = flowernode.getChildren();
+		Collection<HierarchyNode> flowerchildren = flowernode.getChildren();
 		assertEquals(3, flowerchildren.size());
 		Vector<HierarchyNode> flowers = new Vector<HierarchyNode>();
 		flowers.addAll(flowerchildren);
@@ -255,7 +254,7 @@
 				(flowers.get(2)).getName().equals("Plants_Flowers_Daisy") ||
 				(flowers.get(2)).getName().equals("Plants_Flowers_Orchid"));
 		
-		Set<HierarchyNode> nutchildren = nutnode.getChildren();
+		Collection<HierarchyNode> nutchildren = nutnode.getChildren();
 		assertEquals(2, nutchildren.size());
 		Vector<HierarchyNode> nuts = new Vector<HierarchyNode>();
 		nuts.addAll(nutchildren);
@@ -296,13 +295,13 @@
 		assertNull(actual.getParent());
 		assertNotNull(actual.getChildren());
 
-		Set<HierarchyNode> children1 = actual.getChildren();
+		Collection<HierarchyNode> children1 = actual.getChildren();
 		assertEquals(1, children1.size());
 		Vector<HierarchyNode> nodes1 = new Vector<HierarchyNode>();
 		nodes1.addAll(children1);
 		assertTrue((nodes1.get(0)).getName().equals("Plants"));
 
-		Set<HierarchyNode> children2 = (nodes1.get(0)).getChildren();
+		Collection<HierarchyNode> children2 = (nodes1.get(0)).getChildren();
 		assertEquals(3, children2.size());
 		Vector<HierarchyNode> nodes2 = new Vector<HierarchyNode>();
 		nodes2.addAll(children2);
@@ -320,7 +319,7 @@
 			if (node.getName().equals("Nuts")) nutnode = node;
 		}
 		
-		Set<HierarchyNode> treechildren = treenode.getChildren();
+		Collection<HierarchyNode> treechildren = treenode.getChildren();
 		assertEquals(2, treechildren.size());
 		Vector<HierarchyNode> trees = new Vector<HierarchyNode>();
 		trees.addAll(treechildren);
@@ -329,7 +328,7 @@
 		assertTrue((trees.get(1)).getName().equals("Chestnut") ||
 				(trees.get(1)).getName().equals("Pine"));
 		
-		Set<HierarchyNode> flowerchildren = flowernode.getChildren();
+		Collection<HierarchyNode> flowerchildren = flowernode.getChildren();
 		assertEquals(3, flowerchildren.size());
 		Vector<HierarchyNode> flowers = new Vector<HierarchyNode>();
 		flowers.addAll(flowerchildren);
@@ -343,7 +342,7 @@
 				(flowers.get(2)).getName().equals("Daisy") ||
 				(flowers.get(2)).getName().equals("Orchid"));
 		
-		Set<HierarchyNode> nutchildren = nutnode.getChildren();
+		Collection<HierarchyNode> nutchildren = nutnode.getChildren();
 		assertEquals(2, nutchildren.size());
 		Vector<HierarchyNode> nuts = new Vector<HierarchyNode>();
 		nuts.addAll(nutchildren);
@@ -376,13 +375,13 @@
 		assertNull(actual.getParent());
 		assertNotNull(actual.getChildren());
 
-		Set<HierarchyNode> children1 = actual.getChildren();
+		Collection<HierarchyNode> children1 = actual.getChildren();
 		assertEquals(1, children1.size());
 		Vector<HierarchyNode> nodes1 = new Vector<HierarchyNode>();
 		nodes1.addAll(children1);
 		assertTrue((nodes1.get(0)).getName().equals("Plants"));
 
-		Set<HierarchyNode> children2 = (nodes1.get(0)).getChildren();
+		Collection<HierarchyNode> children2 = (nodes1.get(0)).getChildren();
 		assertEquals(2, children2.size());
 		Vector<HierarchyNode> nodes2 = new Vector<HierarchyNode>();
 		nodes2.addAll(children2);
@@ -397,7 +396,7 @@
 			if (node.getName().equals("Plants Nuts")) nutnode = node;
 		}
 		
-		Set<HierarchyNode> flowerchildren = flowernode.getChildren();
+		Collection<HierarchyNode> flowerchildren = flowernode.getChildren();
 		assertEquals(2, flowerchildren.size());
 		Vector<HierarchyNode> flowers = new Vector<HierarchyNode>();
 		flowers.addAll(flowerchildren);
@@ -406,7 +405,7 @@
 		assertTrue((flowers.get(1)).getName().equals("Plants Flowers Rose") ||
 				(flowers.get(1)).getName().equals("Plants Flowers Orchid"));
 		
-		Set<HierarchyNode> nutchildren = nutnode.getChildren();
+		Collection<HierarchyNode> nutchildren = nutnode.getChildren();
 		assertEquals(1, nutchildren.size());
 		Vector<HierarchyNode> nuts = new Vector<HierarchyNode>();
 		nuts.addAll(nutchildren);
@@ -447,13 +446,13 @@
 		assertNull(actual.getParent());
 		assertNotNull(actual.getChildren());
 
-		Set<HierarchyNode> children1 = actual.getChildren();
+		Collection<HierarchyNode> children1 = actual.getChildren();
 		assertEquals(1, children1.size());
 		Vector<HierarchyNode> nodes1 = new Vector<HierarchyNode>();
 		nodes1.addAll(children1);
 		assertTrue((nodes1.get(0)).getName().equals("Plants"));
 
-		Set<HierarchyNode> children2 = (nodes1.get(0)).getChildren();
+		Collection<HierarchyNode> children2 = (nodes1.get(0)).getChildren();
 		assertEquals(1, children2.size());
 		Vector<HierarchyNode> nodes2 = new Vector<HierarchyNode>();
 		nodes2.addAll(children2);
@@ -461,7 +460,7 @@
 
 		HierarchyNode treenode = nodes2.get(0); 
 		
-		Set<HierarchyNode> treechildren = treenode.getChildren();
+		Collection<HierarchyNode> treechildren = treenode.getChildren();
 		assertEquals(5, treechildren.size());
 		Vector<HierarchyNode> trees = new Vector<HierarchyNode>();
 		trees.addAll(treechildren);
@@ -518,19 +517,19 @@
 		assertNull(actual.getParent());
 		assertNotNull(actual.getChildren());
 
-		Set<HierarchyNode> home = actual.getChildren();
+		Collection<HierarchyNode> home = actual.getChildren();
 		assertEquals(1, home.size());
 		Vector<HierarchyNode> nodes0 = new Vector<HierarchyNode>();
 		nodes0.addAll(home);
 		assertTrue((nodes0.get(0)).getName().equals("Home"));
 		
-		Set<HierarchyNode> children1 = nodes0.get(0).getChildren();
+		Collection<HierarchyNode> children1 = nodes0.get(0).getChildren();
 		assertEquals(1, children1.size());
 		Vector<HierarchyNode> nodes1 = new Vector<HierarchyNode>();
 		nodes1.addAll(children1);
 		assertTrue((nodes1.get(0)).getName().equals("Plants"));
 
-		Set<HierarchyNode> children2 = (nodes1.get(0)).getChildren();
+		Collection<HierarchyNode> children2 = (nodes1.get(0)).getChildren();
 		assertEquals(1, children2.size());
 		Vector<HierarchyNode> nodes2 = new Vector<HierarchyNode>();
 		nodes2.addAll(children2);
@@ -538,7 +537,7 @@
 
 		HierarchyNode treenode = nodes2.get(0); 
 		
-		Set<HierarchyNode> treechildren = treenode.getChildren();
+		Collection<HierarchyNode> treechildren = treenode.getChildren();
 		assertEquals(5, treechildren.size());
 		Vector<HierarchyNode> trees = new Vector<HierarchyNode>();
 		trees.addAll(treechildren);
@@ -593,7 +592,7 @@
 		assertNull(actual.getParent());
 		assertNotNull(actual.getChildren());
 
-		Set<HierarchyNode> children1 = actual.getChildren();
+		Collection<HierarchyNode> children1 = actual.getChildren();
 		assertEquals(1, children1.size());
 		Vector<HierarchyNode> nodes1 = new Vector<HierarchyNode>();
 		nodes1.addAll(children1);
@@ -631,13 +630,13 @@
 		assertNull(actual.getParent());
 		assertNotNull(actual.getChildren());
 
-		Set<HierarchyNode> children1 = actual.getChildren();
+		Collection<HierarchyNode> children1 = actual.getChildren();
 		assertEquals(1, children1.size());
 		Vector<HierarchyNode> nodes1 = new Vector<HierarchyNode>();
 		nodes1.addAll(children1);
 		assertTrue((nodes1.get(0)).getName().equals("Plants"));
 
-		Set<HierarchyNode> children2 = (nodes1.get(0)).getChildren();
+		Collection<HierarchyNode> children2 = (nodes1.get(0)).getChildren();
 		assertEquals(1, children2.size());
 		Vector<HierarchyNode> nodes2 = new Vector<HierarchyNode>();
 		nodes2.addAll(children2);
@@ -645,7 +644,7 @@
 
 		HierarchyNode treenode = nodes2.get(0); 
 		
-		Set<HierarchyNode> treechildren = treenode.getChildren();
+		Collection<HierarchyNode> treechildren = treenode.getChildren();
 		assertEquals(5, treechildren.size());
 		Vector<HierarchyNode> trees = new Vector<HierarchyNode>();
 		trees.addAll(treechildren);
@@ -808,13 +807,13 @@
 		assertNull(actual.getParent());
 		assertNotNull(actual.getChildren());
 
-		Set<HierarchyNode> children1 = actual.getChildren();
+		Collection<HierarchyNode> children1 = actual.getChildren();
 		assertEquals(1, children1.size());
 		Vector<HierarchyNode> nodes1 = new Vector<HierarchyNode>();
 		nodes1.addAll(children1);
 		assertTrue((nodes1.get(0)).getName().equals("TestPage"));
 
-		Set<HierarchyNode> children2 = (nodes1.get(0)).getChildren();
+		Collection<HierarchyNode> children2 = (nodes1.get(0)).getChildren();
 		assertEquals(3, children2.size());
 		Vector<HierarchyNode> nodes2 = new Vector<HierarchyNode>();
 		nodes2.addAll(children2);
@@ -824,7 +823,7 @@
 
 		HierarchyNode parent0node = nodes2.get(2); 
 		
-		Set<HierarchyNode> p0children = parent0node.getChildren();
+		Collection<HierarchyNode> p0children = parent0node.getChildren();
 		assertEquals(2, p0children.size());
 		Vector<HierarchyNode> p0 = new Vector<HierarchyNode>();
 		p0.addAll(p0children);
diff --git a/src/com/atlassian/uwc/hierarchies/DocDirectoryHierarchyTest.java b/src/com/atlassian/uwc/hierarchies/DocDirectoryHierarchyTest.java
index adb7d14..bb09e8d 100644
--- a/src/com/atlassian/uwc/hierarchies/DocDirectoryHierarchyTest.java
+++ b/src/com/atlassian/uwc/hierarchies/DocDirectoryHierarchyTest.java
@@ -1,8 +1,8 @@
 package com.atlassian.uwc.hierarchies;
 
 import java.io.File;
+import java.util.Collection;
 import java.util.Properties;
-import java.util.Set;
 import java.util.Vector;
 
 import junit.framework.TestCase;
@@ -10,7 +10,6 @@
 import org.apache.log4j.Logger;
 import org.apache.log4j.PropertyConfigurator;
 
-import com.atlassian.uwc.filters.NoSvnFilter;
 import com.atlassian.uwc.ui.Page;
 
 public class DocDirectoryHierarchyTest extends TestCase {
@@ -49,7 +48,7 @@
 		assertNull(actual.getParent());
 		assertNotNull(actual.getChildren());
 		
-		Set<HierarchyNode> children1 = actual.getChildren();
+		Collection<HierarchyNode> children1 = actual.getChildren();
 		assertEquals(1, children1.size());
 		Vector<HierarchyNode> nodes1 = new Vector<HierarchyNode>();
 		nodes1.addAll(children1);
@@ -60,7 +59,7 @@
 		File file = (File) object;
 		assertTrue("test.txt".equals(file.getName()));
 		
-		Set<HierarchyNode> children2 = nodes1.get(0).getChildren();
+		Collection<HierarchyNode> children2 = nodes1.get(0).getChildren();
 		assertEquals(3, children2.size());
 		Vector<HierarchyNode> nodes2 = new Vector<HierarchyNode>();
 		nodes2.addAll(children2);
@@ -76,7 +75,7 @@
 				assertTrue("test1.txt".equals(filea.getName())||
 						"test2.txt".equals(filea.getName())
 						);
-				Set<HierarchyNode> children3 = node.getChildren();
+				Collection<HierarchyNode> children3 = node.getChildren();
 				assertEquals(1, children3.size());
 				Vector<HierarchyNode> nodes3 = new Vector<HierarchyNode>();
 				nodes3.addAll(children3);
@@ -123,7 +122,7 @@
 		assertNull(actual.getParent());
 		assertNotNull(actual.getChildren());
 		
-		Set<HierarchyNode> children1 = actual.getChildren();
+		Collection<HierarchyNode> children1 = actual.getChildren();
 		assertEquals(1, children1.size());
 		Vector<HierarchyNode> nodes1 = new Vector<HierarchyNode>();
 		nodes1.addAll(children1);
@@ -152,7 +151,7 @@
 		assertNull(actual.getParent());
 		assertNotNull(actual.getChildren());
 		
-		Set<HierarchyNode> children1 = actual.getChildren();
+		Collection<HierarchyNode> children1 = actual.getChildren();
 		assertEquals(1, children1.size());
 		Vector<HierarchyNode> nodes1 = new Vector<HierarchyNode>();
 		nodes1.addAll(children1);
@@ -183,7 +182,7 @@
 		assertNull(actual.getParent());
 		assertNotNull(actual.getChildren());
 		
-		Set<HierarchyNode> children1 = actual.getChildren();
+		Collection<HierarchyNode> children1 = actual.getChildren();
 		assertEquals(1, children1.size());
 		Vector<HierarchyNode> nodes1 = new Vector<HierarchyNode>();
 		nodes1.addAll(children1);
@@ -194,7 +193,7 @@
 		File file = (File) object;
 		assertTrue("test.txt".equals(file.getName()));
 		
-		Set<HierarchyNode> children2 = nodes1.get(0).getChildren();
+		Collection<HierarchyNode> children2 = nodes1.get(0).getChildren();
 		assertEquals(2, children2.size());
 		Vector<HierarchyNode> nodes2 = new Vector<HierarchyNode>();
 		nodes2.addAll(children2);
diff --git a/src/com/atlassian/uwc/hierarchies/DokuwikiHierarchy.java b/src/com/atlassian/uwc/hierarchies/DokuwikiHierarchy.java
index be3f380..7479af6 100644
--- a/src/com/atlassian/uwc/hierarchies/DokuwikiHierarchy.java
+++ b/src/com/atlassian/uwc/hierarchies/DokuwikiHierarchy.java
@@ -19,7 +19,8 @@
 	int newpagescount = 0;
 	
 	public HierarchyNode buildHierarchy(Collection<Page> pages) {
-		getRootNode().setChildrenComparator(dokuComparator());
+//		getRootNode().setChildrenComparator(dokuComparator());
+		getRootNode().childrenAsList(true);
 		log.debug("Number of hierarchy pages: " + pages.size());
 		//run the filepath hierarchy first -
 		HierarchyNode node = super.buildHierarchy(pages);
@@ -65,78 +66,12 @@
 	}
 
 
-	protected Comparator<HierarchyNode> dokuComparator() {
-		return new Comparator<HierarchyNode>() {
-			@Override
-			public int compare(HierarchyNode o1, HierarchyNode o2) {
-				//Step 1: IF OBJ ARE SAME RETURN 0
-				if (o1.equals(o2)) {
-					log.debug("COMPARATOR: (1 - same object) equivalent obj: " + o1.getName() + " and " + o2.getName());
-					return 0;
-				}
-				//Step 2: HANDLE NULL NAMES
-				String name1 = o1.getName();
-				String name2 = o2.getName();
-				if (name1 == null && name2 == null) return 0;
-				if (name1 == null) return -1;
-				if (name2 == null) return 1;
-				//Step 3: EQUALIVALENT NAMES, check path and spacekey
-				if (equalize(name1).equals(equalize(name2))) { 
-					//check child nodes (null pages might still have children)
-					String tree1 = o1.toString();
-					String tree2 = o2.toString();
-					if (!tree1.equalsIgnoreCase(tree2)) return tree1.compareTo(tree2);
-					//check page data: spacekey and path
-					if (o1.getPage() != null) {
-						//check spacekeys
-						String key1 = o1.getPage().getSpacekey();
-						String key2 = (o2.getPage() != null)?o2.getPage().getSpacekey():null;
-						int compareToKey;
-						if (key1 == null && key2 == null) compareToKey = 0;
-						else if (key1 == null) return -1;
-						else if (key2 == null) return 1;
-						else compareToKey = key1.compareTo(key2);
-						if (compareToKey == 0) {
-							//check pagepath
-							String pagepath1 = o1.getPage().getPath();
-							String pagepath2 = (o2.getPage() != null)?o2.getPage().getPath():null;
-							if (pagepath1 == null && pagepath2 == null) {
-								log.debug("COMPARATOR: (2 - no paths) equivalent obj: " + o1.getName() + " and " + o2.getName());
-								return 0;
-							}
-							if (pagepath1 == null) return -1;
-							if (pagepath2 == null) return 1;
-							if (pagepath1.compareTo(pagepath2) != 0) return pagepath1.compareTo(pagepath2);
-							//check page content
-							String orig1 = o1.getPage().getOriginalText();
-							String orig2 = (o2.getPage() != null)?o2.getPage().getOriginalText():null;
-							if (orig1.compareTo(orig2) != 0) {
-								String newname = name2+" B";
-								o2.setName(newname); //XXX This isn't perfect. Just intended to add some level uniqueness, and hopefully not a lot of these will occur
-								o2.getPage().setName(newname);
-								log.debug("Found conflicting nodes with different content. Renaming one of them to: " + newname);
-								return orig1.compareTo(orig2);
-							}
-						}
-						if (compareToKey == 0) 
-							log.debug("COMPARATOR: (3 - same key, children, path, content) equivalent obj: " + o1.getName() + " and " + o2.getName());
-						return compareToKey;
-					}
-					else if (o2.getPage() != null) return 1;
-					log.debug("COMPARATOR: (4 - no page data) equivalent obj: " + o1.getName() + " and " + o2.getName());
-					return 0; 
-				}
-				//Step 4: NOT EQUIVALENT NAME -- FIXME not working for 'Agile Principles, Patterns And Practices In C#'
-				return equalize(name1).compareTo(equalize(name2)); //names aren't equal
-			}
-		};
-	}
 
 
 	private HierarchyNode handleSpacekeyBranchWithProp(HierarchyNode node) {
 		String spacekey = getProperties().getProperty("spacekey");
 		if (spacekey != null && !"".equals(spacekey)) { 
-			Set<HierarchyNode> top = node.getChildren();
+			Collection<HierarchyNode> top = node.getChildren();
 			for (Iterator iter = top.iterator(); iter.hasNext();) {
 				HierarchyNode topnode = (HierarchyNode) iter.next();
 				if (topnode.getName().toLowerCase().equals(spacekey.toLowerCase())) {
@@ -150,7 +85,7 @@
 	}
 
 	private HierarchyNode handleSpacekeyBranchWithPage(HierarchyNode root) {
-		Set<HierarchyNode> top = root.getChildren();
+		Collection<HierarchyNode> top = root.getChildren();
 		Vector<HierarchyNode> ordered = new Vector<HierarchyNode>(top);
 		for (HierarchyNode topnode : ordered) {
 			root = handleSpacekeyBranchTop(root, topnode);
@@ -165,27 +100,8 @@
 		else if (node.getPage().getSpacekey() != null) {
 			String spacekey = node.getPage().getSpacekey();
 			node = setAncestorsBySpacekey(root, node, spacekey);
-//			if (node.getParent() == null) {
-//				Set<HierarchyNode> top = root.getChildren();
-//				Vector<HierarchyNode> ordered = new Vector<HierarchyNode>(top);
-//				for (HierarchyNode topnode : ordered) {
-//					if (topnode.getPage() == null) {
-//						log.debug("NULL! (Skipping) topnode.getName() = " + topnode.getName());
-//						continue;
-//					}
-//					if (spacekey.equals(topnode.getPage().getSpacekey())) {
-//						Set<HierarchyNode> children = topnode.getChildren();
-//						log.debug("Moving topnode: " + topnode.getPage().getName());
-//						topnode.setParent(null); //since we have to use iter.remove instead of node.removeChild(topnode)
-//						for (HierarchyNode child : children) {
-//							root.addChild(child);
-//						}
-//						break;
-//					}
-//				}
-//			}
 		}
-		Set<HierarchyNode> nextSet = node.getChildren();
+		Collection<HierarchyNode> nextSet = node.getChildren();
 		Vector<HierarchyNode> ordered = new Vector<HierarchyNode>(nextSet);
 		for (HierarchyNode next : ordered) {
 			root = handleSpacekeyBranchTop(root, next);
@@ -278,7 +194,10 @@
 			newparentpage.setConvertedText(parent.getPage().getConvertedText());
 		newparent.setPage(newparentpage);
 		HierarchyNode gparent = parent.getParent();
-		parent.removeChild(node);
+		if (!parent.removeChild(node)) {
+//			log.debug("tree for parent: " + parent.getName());
+//			printTree(parent);
+		}
 		newparent.addChild(node);
 		gparent.addChild(newparent);
 		if (gparent.getName() == null) return;
@@ -286,7 +205,7 @@
 	}
 
 	private void setTopNodeBranch(HierarchyNode root, Iterator topiter, HierarchyNode nexttopnode) {
-		Set<HierarchyNode> children = nexttopnode.getChildren();
+		Collection<HierarchyNode> children = nexttopnode.getChildren();
 		topiter.remove(); //Only allowed way to remove from an iterator. 
 		nexttopnode.setParent(null); //since we have to use iter.remove instead of node.removeChild(topnode)
 		for (HierarchyNode child : children) {
@@ -295,7 +214,7 @@
 	}
 
 	private HierarchyNode handleHomePages(HierarchyNode node, boolean top) {
-		Set<HierarchyNode> children = node.getChildren();
+		Collection<HierarchyNode> children = node.getChildren();
 		for (Iterator iter = children.iterator(); iter.hasNext();) { 
 			HierarchyNode child = (HierarchyNode) iter.next();
 			String name = child.getName();
@@ -321,7 +240,7 @@
 
 	private HierarchyNode fixCollisions(HierarchyNode node) {
 		
-		Set<HierarchyNode> children = node.getChildren();
+		Collection<HierarchyNode> children = node.getChildren();
 		Vector<HierarchyNode> childrenV = new Vector<HierarchyNode>(children);
 		for (int i = 0; i < childrenV.size(); i++) {
 			HierarchyNode child = (HierarchyNode) childrenV.get(i);
@@ -347,16 +266,17 @@
 		return node;
 	}
 	
+	private static int numericCollisionCounter = 2;
 	private HierarchyNode mergeBrokenNodes(HierarchyNode node) {
 		
-		Set<HierarchyNode> children = node.getChildren();
+		Collection<HierarchyNode> children = node.getChildren();
 		Vector<HierarchyNode> childrenV = new Vector<HierarchyNode>(children);
 		for (int i = 0; i < childrenV.size(); i++) {
 			HierarchyNode child = (HierarchyNode) childrenV.get(i);
 			log.debug("Merging child: '"  + child.getName()+"'");
 			HierarchyNode parent = child.getParent();
 			if (child.getPage() != null && child.getPage().getFile() != null) { 
-				Set<HierarchyNode> siblingsSet = parent.getChildren();
+				Collection<HierarchyNode> siblingsSet = parent.getChildren();
 				Vector<HierarchyNode> siblings = new Vector<HierarchyNode>();
 				for (HierarchyNode s : siblingsSet) {
 					if (!s.equals(child)) {
@@ -372,6 +292,12 @@
 							mergeTwoNodes(child, sibling, parent);
 						}
 					}
+					else if (child.getName().equalsIgnoreCase(sibling.getName())) {
+						String newname = sibling.getName() + " " + numericCollisionCounter++;
+						log.debug("Found conflicting node. Changing name to: '"+ newname + "'");
+						sibling.setName(newname);
+						sibling.getPage().setName(newname);
+					}
 				}
 			}
 //			log.debug("***v");
@@ -389,9 +315,12 @@
 //			log.debug("adding child: " + gchild.getName());
 			first.addChild(gchild);
 		}
-		if (parent != null) parent.removeChild(second);
-//		log.debug("parent tree -  1 depth");
-//		printTreeOneLevel(parent);
+		if (parent != null) {
+			if (!parent.removeChild(second)) {
+//				log.debug("parent tree");
+//				printTree(parent);
+			}
+		}
 //		log.debug("child tree");
 //		printTreeOneLevel(first);
 	}
@@ -413,6 +342,7 @@
 			log.debug("first node name: " + first.getName() + " and full file path: " + first.getPage().getFile().getAbsolutePath());
 			log.debug("filename of first node: " + filename + " and equalized: " + equalize(filename));
 			log.debug("second node name: " + second.getName() + " and equalized: " + equalize(second.getName()));
+			log.debug("first spacekey " + first.getPage().getSpacekey() + " ... second spacekey " + ((second.getPage()!=null)?second.getPage().getSpacekey():"null"));
 		}
 		return samenode;
 	}
@@ -426,7 +356,7 @@
 		log.debug("Attempting to identify meta name for parent title.");
 		HierarchyNode gparent = child.getParent().getParent();
 		if (gparent == null) return basename;
-		Set<HierarchyNode> siblingsSet = gparent.getChildren();
+		Collection<HierarchyNode> siblingsSet = gparent.getChildren();
 		Vector<HierarchyNode> siblings = new Vector<HierarchyNode>(siblingsSet);
 		for (int i = 0; i < siblings.size(); i++) {
 			HierarchyNode sibling = (HierarchyNode) siblings.get(i);
@@ -472,7 +402,7 @@
 	}
 
 	private HierarchyNode attachAllImages(HierarchyNode node, Vector<File> attdirs, boolean top) {
-		Set<HierarchyNode> children = node.getChildren();
+		Collection<HierarchyNode> children = node.getChildren();
 		for (Iterator iter = children.iterator(); iter.hasNext();) { 
 			HierarchyNode child = (HierarchyNode) iter.next();
 			String name = getOrigChildName(child);
@@ -575,7 +505,7 @@
 	HierarchyTitleConverter titleConverter = new HierarchyTitleConverter();
 	//nodes without pages probably will need this
 	private HierarchyNode fixTitles(HierarchyNode node) { 
-		Set<HierarchyNode> children = node.getChildren();
+		Collection<HierarchyNode> children = node.getChildren();
 		for (Iterator iter = children.iterator(); iter.hasNext();) { 
 			HierarchyNode child = (HierarchyNode) iter.next();
 			if (child.getPage() == null)
@@ -610,7 +540,7 @@
 	}
 
 	public void combineHomepages() {
-		Set<HierarchyNode> children = currentParent.getChildren();
+		Collection<HierarchyNode> children = currentParent.getChildren();
 		Vector<HierarchyNode> all = new Vector<HierarchyNode>(children);
 		HierarchyNode first = null, second = null;
 		for (int i = 0; i < all.size()-1 && all.size() > 1; i++) {
@@ -675,7 +605,7 @@
 		printTree(node.getChildren(), "");
 	}
 
-	private void printTree(Set<HierarchyNode> children, String delim) {
+	private void printTree(Collection<HierarchyNode> children, String delim) {
 		for (HierarchyNode child : children) {
 			String newdelim = delim + " .";
 			String childdata = child.getName();
@@ -687,7 +617,7 @@
 	}
 	
 	private void printTreeOneLevel(HierarchyNode node) {
-		Set<HierarchyNode> children = node.getChildren();
+		Collection<HierarchyNode> children = node.getChildren();
 		for (HierarchyNode child : children) {
 			log.debug("PRINTTREE: " + child.getName());
 		}
diff --git a/src/com/atlassian/uwc/hierarchies/DokuwikiHierarchyTest.java b/src/com/atlassian/uwc/hierarchies/DokuwikiHierarchyTest.java
index d53f184..e46f49c 100644
--- a/src/com/atlassian/uwc/hierarchies/DokuwikiHierarchyTest.java
+++ b/src/com/atlassian/uwc/hierarchies/DokuwikiHierarchyTest.java
@@ -56,7 +56,7 @@
 		assertNull(root.getParent());
 		assertNotNull(root.getChildren());
 		
-		Set<HierarchyNode> top = root.getChildren();
+		Collection<HierarchyNode> top = root.getChildren();
 		assertEquals(5, top.size());
 		Vector<HierarchyNode> nodes0 = new Vector<HierarchyNode>();
 		nodes0.addAll(top);
@@ -142,7 +142,7 @@
 		assertNull(root.getParent());
 		assertNotNull(root.getChildren());
 		
-		Set<HierarchyNode> top = root.getChildren();
+		Collection<HierarchyNode> top = root.getChildren();
 		assertEquals(5, top.size());
 		Vector<HierarchyNode> nodes0 = new Vector<HierarchyNode>();
 		nodes0.addAll(top);
@@ -188,7 +188,7 @@
 		assertNull(root.getParent());
 		assertNotNull(root.getChildren());
 		
-		Set<HierarchyNode> top = root.getChildren();
+		Collection<HierarchyNode> top = root.getChildren();
 		assertEquals(5, top.size());
 		Vector<HierarchyNode> nodes0 = new Vector<HierarchyNode>();
 		nodes0.addAll(top);
@@ -257,7 +257,7 @@
 		assertNull(root.getParent());
 		assertNotNull(root.getChildren());
 		
-		Set<HierarchyNode> top = root.getChildren();
+		Collection<HierarchyNode> top = root.getChildren();
 		assertEquals(3, top.size());
 		Vector<HierarchyNode> nodes0 = new Vector<HierarchyNode>();
 		nodes0.addAll(top);
@@ -336,7 +336,7 @@
 //		assertNull(root.getParent());
 //		assertNotNull(root.getChildren());
 //		
-//		Set<HierarchyNode> top = root.getChildren();
+//		Collection<HierarchyNode> top = root.getChildren();
 //		assertEquals(6, top.size());
 //		Vector<HierarchyNode> nodes0 = new Vector<HierarchyNode>();
 //		nodes0.addAll(top);
@@ -426,7 +426,7 @@
 		assertNull(root.getParent());
 		assertNotNull(root.getChildren());
 		
-		Set<HierarchyNode> top = root.getChildren();
+		Collection<HierarchyNode> top = root.getChildren();
 		assertEquals(5, top.size());
 		Vector<HierarchyNode> nodes0 = new Vector<HierarchyNode>();
 		nodes0.addAll(top);
@@ -479,7 +479,7 @@
 		assertNull(root.getParent());
 		assertNotNull(root.getChildren());
 		
-		Set<HierarchyNode> top = root.getChildren();
+		Collection<HierarchyNode> top = root.getChildren();
 		assertEquals(2, top.size());
 		Vector<HierarchyNode> nodes0 = new Vector<HierarchyNode>();
 		nodes0.addAll(top);
@@ -558,7 +558,7 @@
 		assertNull(root.getParent());
 		assertNotNull(root.getChildren());
 		
-		Set<HierarchyNode> top = root.getChildren();
+		Collection<HierarchyNode> top = root.getChildren();
 		assertEquals(2, top.size());
 		Vector<HierarchyNode> nodes0 = new Vector<HierarchyNode>();
 		nodes0.addAll(top);
diff --git a/src/com/atlassian/uwc/hierarchies/FilenameHierarchyTest.java b/src/com/atlassian/uwc/hierarchies/FilenameHierarchyTest.java
index 859b438..86cc4e8 100644
--- a/src/com/atlassian/uwc/hierarchies/FilenameHierarchyTest.java
+++ b/src/com/atlassian/uwc/hierarchies/FilenameHierarchyTest.java
@@ -1,9 +1,8 @@
 package com.atlassian.uwc.hierarchies;
 
 import java.io.File;
-import java.util.Comparator;
+import java.util.Collection;
 import java.util.Properties;
-import java.util.Set;
 import java.util.Vector;
 
 import junit.framework.TestCase;
@@ -39,7 +38,7 @@
 		HierarchyNode actual = tester.buildHierarchy(pages);
 		assertNotNull(actual);
 		
-		Set<HierarchyNode> nodes = actual.getChildren();
+		Collection<HierarchyNode> nodes = actual.getChildren();
 		assertNotNull(nodes);
 		assertEquals(1, nodes.size());
 		for (HierarchyNode root : nodes) {
@@ -62,7 +61,7 @@
 		HierarchyNode actual = tester.buildHierarchy(pages);
 		assertNotNull(actual);
 		
-		Set<HierarchyNode> nodes = actual.getChildren();
+		Collection<HierarchyNode> nodes = actual.getChildren();
 		assertNotNull(nodes);
 		assertEquals(1, nodes.size());
 		for (HierarchyNode root : nodes) {
@@ -89,7 +88,7 @@
 		HierarchyNode actual = tester.buildHierarchy(pages);
 		assertNotNull(actual);
 		
-		Set<HierarchyNode> nodes = actual.getChildren();
+		Collection<HierarchyNode> nodes = actual.getChildren();
 		assertNotNull(nodes);
 		assertEquals(1, nodes.size());
 		for (HierarchyNode root : nodes) {
@@ -122,7 +121,7 @@
 		HierarchyNode actual = tester.buildHierarchy(pages);
 		assertNotNull(actual);
 		
-		Set<HierarchyNode> nodes = actual.getChildren();
+		Collection<HierarchyNode> nodes = actual.getChildren();
 		assertNotNull(nodes);
 		assertEquals(1, nodes.size());
 		for (HierarchyNode root : nodes) {
@@ -244,7 +243,7 @@
 		pages.add(page);
 	}
 	
-	private Vector<HierarchyNode> asVector(Set<HierarchyNode> children) {
+	private Vector<HierarchyNode> asVector(Collection<HierarchyNode> children) {
 		Vector<HierarchyNode> nodes = new Vector<HierarchyNode>();
 		nodes.addAll(children);
 		return nodes;
diff --git a/src/com/atlassian/uwc/hierarchies/FilepathHierarchy.java b/src/com/atlassian/uwc/hierarchies/FilepathHierarchy.java
index 6102e31..95a840e 100644
--- a/src/com/atlassian/uwc/hierarchies/FilepathHierarchy.java
+++ b/src/com/atlassian/uwc/hierarchies/FilepathHierarchy.java
@@ -173,7 +173,7 @@
 		log.debug("...... checking parent '" + parent.getName() + "' has relationship with '" + childname + "'");
 		boolean relationship = false;
 		
-		Set<HierarchyNode> children = parent.getChildren();
+		Collection<HierarchyNode> children = parent.getChildren();
 		if (children == null || children.isEmpty()) {
 			log.debug("...... -> parent has no children");
 			return false;
@@ -226,7 +226,7 @@
 	 */
 	protected HierarchyNode getChildNode(HierarchyNode parent, String childname) {
 		log.debug("...... Getting child node with name: " + childname);
-		Set<HierarchyNode> children = parent.getChildren();
+		Collection<HierarchyNode> children = (Collection<HierarchyNode>) parent.getChildren();
 		if (children == null || children.isEmpty()) {
 			log.debug("...... -> parent has no children. Returning null.");
 			return null;
diff --git a/src/com/atlassian/uwc/hierarchies/FilepathHierarchyTest.java b/src/com/atlassian/uwc/hierarchies/FilepathHierarchyTest.java
index 7214176..9ef0f54 100644
--- a/src/com/atlassian/uwc/hierarchies/FilepathHierarchyTest.java
+++ b/src/com/atlassian/uwc/hierarchies/FilepathHierarchyTest.java
@@ -5,7 +5,6 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Properties;
-import java.util.Set;
 import java.util.Vector;
 
 import junit.framework.TestCase;
@@ -13,7 +12,6 @@
 import org.apache.log4j.Logger;
 import org.apache.log4j.PropertyConfigurator;
 
-import com.atlassian.uwc.converters.jotspot.TitleConverter;
 import com.atlassian.uwc.filters.NoSvnFilter;
 import com.atlassian.uwc.ui.Page;
 
@@ -80,7 +78,7 @@
 		assertNull(actual.getParent());
 		assertNotNull(actual.getChildren());
 		
-		Set<HierarchyNode> level1ChildSet = actual.getChildren();
+		Collection<HierarchyNode> level1ChildSet = actual.getChildren();
 		assertEquals(2, level1ChildSet.size());
 		Vector<HierarchyNode> level1Children = new Vector<HierarchyNode>();
 		level1Children.addAll(level1ChildSet);
@@ -127,7 +125,7 @@
 		assertNull(actual.getParent());
 		assertNotNull(actual.getChildren());
 		
-		Set<HierarchyNode> level1ChildSet = actual.getChildren();
+		Collection<HierarchyNode> level1ChildSet = actual.getChildren();
 		assertEquals(2, level1ChildSet.size());
 		Vector<HierarchyNode> level1Children = new Vector<HierarchyNode>();
 		level1Children.addAll(level1ChildSet);
@@ -175,7 +173,7 @@
 		assertNull(actual.getParent());
 		assertNotNull(actual.getChildren());
 		
-		Set<HierarchyNode> level1ChildSet = actual.getChildren();
+		Collection<HierarchyNode> level1ChildSet = actual.getChildren();
 		assertEquals(2, level1ChildSet.size());
 		Vector<HierarchyNode> level1Children = new Vector<HierarchyNode>();
 		level1Children.addAll(level1ChildSet);
@@ -600,7 +598,7 @@
 		HierarchyNode root = tester.buildHierarchy(pages);
 		assertNotNull(root);
 		assertEquals(6, root.countDescendants());
-		Set<HierarchyNode> level1 = root.getChildren();
+		Collection<HierarchyNode> level1 = root.getChildren();
 		assertNotNull(level1);
 		assertEquals(2, level1.size());
 		for (HierarchyNode lvl1Node : level1) {
@@ -611,7 +609,7 @@
 			else if ("Drink.txt".equals(lvl1Node.getName())) fail("Still have Drink node");
 			else if ("Comestibles".equals(lvl1Node.getName())) {
 				assertEquals(3, lvl1Node.countDescendants());
-				Set<HierarchyNode> level2 = lvl1Node.getChildren();
+				Collection<HierarchyNode> level2 = lvl1Node.getChildren();
 				assertNotNull(level2);
 				assertEquals(2, level2.size());
 				for (HierarchyNode lvl2Node : level2) {
@@ -622,7 +620,7 @@
 			}
 			else if ("Liquid".equals(lvl1Node.getName())) {
 				assertEquals(2, lvl1Node.countDescendants());
-				Set<HierarchyNode> level2 = lvl1Node.getChildren();
+				Collection<HierarchyNode> level2 = lvl1Node.getChildren();
 				assertNotNull(level2);
 				assertEquals(1, level2.size());
 				for (HierarchyNode lvl2Node : level2) {
@@ -648,19 +646,19 @@
 		HierarchyNode root = tester.buildHierarchy(pages);
 		assertNotNull(root);
 		assertEquals(6, root.countDescendants());
-		Set<HierarchyNode> level1 = root.getChildren();
+		Collection<HierarchyNode> level1 = root.getChildren();
 		assertNotNull(level1);
 		assertEquals(1, level1.size());
 		for (HierarchyNode lvl1Node : level1) {
 			assertNotNull(lvl1Node);
 			if (lvl1Node.getName().endsWith("_subpages")) fail("Still have subpages dir node.");
 			assertEquals(5, lvl1Node.countDescendants());
-			Set<HierarchyNode> level2 = lvl1Node.getChildren();
+			Collection<HierarchyNode> level2 = lvl1Node.getChildren();
 			assertNotNull(level2);
 			assertEquals(1, level2.size());
 			for (HierarchyNode lvl2Node : level2) {
 					if (lvl2Node.getName().endsWith("_subpages")) fail("Still have subpages dir node.");
-					Set<HierarchyNode> level3 = lvl2Node.getChildren();
+					Collection<HierarchyNode> level3 = lvl2Node.getChildren();
 					assertNotNull(level3);
 					assertEquals(3, level3.size());
 			}
@@ -701,7 +699,7 @@
 		assertNull(actual.getParent());
 		assertNotNull(actual.getChildren());
 
-		Set<HierarchyNode> level1ChildSet = actual.getChildren();
+		Collection<HierarchyNode> level1ChildSet = actual.getChildren();
 		assertEquals(1, level1ChildSet.size());
 		assertEquals("sampleData.txt", level1ChildSet.iterator().next().getName());
 		
@@ -771,7 +769,7 @@
 		HierarchyNode rootnode = tester.buildHierarchy(pages);
 
 		assertNull(rootnode.getPage());
-		Set<HierarchyNode> actualrootnodeSet = rootnode.getChildren();
+		Collection<HierarchyNode> actualrootnodeSet = rootnode.getChildren();
 		HierarchyNode actualRootNode = null;
 		for (HierarchyNode next : actualrootnodeSet) {
 			actualRootNode = next;
@@ -781,7 +779,7 @@
 		assertNotNull(actualRoot);
 		assertEquals("Root", actualRoot.getName());
 		
-		Set<HierarchyNode> children = actualRootNode.getChildren();
+		Collection<HierarchyNode> children = actualRootNode.getChildren();
 		for (HierarchyNode childnode : children) {
 			Page childpage = childnode.getPage();
 			assertNotNull(childpage);
diff --git a/src/com/atlassian/uwc/hierarchies/HierarchyNode.java b/src/com/atlassian/uwc/hierarchies/HierarchyNode.java
index 3c2161f..154b81a 100644
--- a/src/com/atlassian/uwc/hierarchies/HierarchyNode.java
+++ b/src/com/atlassian/uwc/hierarchies/HierarchyNode.java
@@ -1,10 +1,13 @@
 package com.atlassian.uwc.hierarchies;

 

+import java.util.Collection;

 import java.util.Comparator;

 import java.util.HashSet;

 import java.util.Iterator;

+import java.util.List;

 import java.util.Set;

 import java.util.TreeSet;

+import java.util.Vector;

 import java.util.regex.Matcher;

 import java.util.regex.Pattern;

 

@@ -21,8 +24,9 @@
     private String name;

     private Page page;

     private HierarchyNode parent;

-    private Set<HierarchyNode> children;

+    private Collection<HierarchyNode> children;

     private static Comparator childrenComparator;

+    private static boolean childrenAsList = false;

 

     Logger log = Logger.getLogger(this.getClass());

     

@@ -66,20 +70,21 @@
      *

      * @param child The child to be removed. Must not be <code>null</code>.

      */

-    public void removeChild(HierarchyNode child) {

+    public boolean removeChild(HierarchyNode child) {

         if (child == null) {

             throw new IllegalArgumentException("The parameter must not be null!");

         }

-        if (children != null && children.contains(child)) {

-            children.remove(child);

+        if (getChildren().remove(child)) {

             log.debug("Removed: '" + child.getName() + "' from " + this.getName());

             if (children.size() == 0) {

                 children = null;

             }

             child.setParent(null);

+            return true;

         }

         else {

         	log.debug("Unable to remove this child: " + child.getName());

+        	return false;

         }

     }

     

@@ -101,9 +106,12 @@
      * @return A set of child nodes, or an empty set if

      *         this node has no children.

      */

-    public Set<HierarchyNode> getChildren() {

+    public Collection<HierarchyNode> getChildren() {

     	if (this.children == null) {

-    		if (childrenComparator == null)

+    		if (childrenAsList) {

+    			this.children = new Vector<HierarchyNode>();

+    		}

+    		else if (childrenComparator == null)

     			this.children = new HashSet<HierarchyNode>();

     		else //if you want to be able to control the child sort order

     			this.children = new TreeSet<HierarchyNode>(childrenComparator);

@@ -120,7 +128,7 @@
         return children == null ? null : children.iterator();

     }

 

-    public void setChildren(Set<HierarchyNode> children) {

+    public void setChildren(Collection<HierarchyNode> children) {

         this.children = children;

     }

     

@@ -226,14 +234,14 @@
         return i;

     }

     

-    public String toString() {

-    	return treeAsString(this);

-    }

-    private String treeAsString(HierarchyNode node) {

+//    public String toString() {

+//    	return treeAsString(this);

+//    }

+    public String treeAsString(HierarchyNode node) {

 		return treeAsString(node.getChildren(), "");

 	}

 

-	private String treeAsString(Set<HierarchyNode> children, String delim) {

+	private String treeAsString(Collection<HierarchyNode> children, String delim) {

 		String msg = "";

 		for (HierarchyNode child : children) {

 			String newdelim = delim + " .";

@@ -242,4 +250,8 @@
 		}

 		return msg;

 	}

+	

+	public static void childrenAsList(boolean aslist) {

+		childrenAsList = aslist;

+	}

 }

diff --git a/src/com/atlassian/uwc/hierarchies/SmfHierarchy.java b/src/com/atlassian/uwc/hierarchies/SmfHierarchy.java
index 14fb305..d6c0058 100644
--- a/src/com/atlassian/uwc/hierarchies/SmfHierarchy.java
+++ b/src/com/atlassian/uwc/hierarchies/SmfHierarchy.java
@@ -10,7 +10,6 @@
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Properties;
-import java.util.Set;
 import java.util.Vector;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -215,7 +214,7 @@
 				Boolean.parseBoolean(this.getProperties().getProperty(PROPKEY_COMMENTS))) {
 			Vector<HierarchyNode> topicNodes = getTopicNodes(root);
 			for (HierarchyNode topic : topicNodes) {
-				Set<HierarchyNode> children = topic.getChildren();
+				Collection<HierarchyNode> children = topic.getChildren();
 				for (Iterator iter = children.iterator(); iter.hasNext();) {
 					HierarchyNode reply = (HierarchyNode) iter.next();
 					String comment = createComment(reply.getName());
diff --git a/src/com/atlassian/uwc/ui/ConverterEngine.java b/src/com/atlassian/uwc/ui/ConverterEngine.java
index e545a73..ac7c1d6 100644
--- a/src/com/atlassian/uwc/ui/ConverterEngine.java
+++ b/src/com/atlassian/uwc/ui/ConverterEngine.java
@@ -2145,11 +2145,12 @@
 		if (!(page instanceof VersionPage) && page.getFile() != null) {

 			log.debug("Original Filepath: " + page.getFile().getAbsolutePath());

 		}

+		String tmpspacekey = (page.getSpacekey()!=null)?page.getSpacekey():confSettings.spaceKey;

 		if (page.isBlog()) {

-			log.debug("Attempting to send blog: " + page.getName() + " to space: " + confSettings.spaceKey);

+			log.debug("Attempting to send blog: " + page.getName() + " to space: " + tmpspacekey);

 			id = sendBlog(broker, pageTable, confSettings);

 		} else { 

-			log.debug("Attempting to send page: " + page.getName() + " to space: " + confSettings.spaceKey);

+			log.debug("Attempting to send page: " + page.getName() + " to space: " + tmpspacekey);

 			id = sendPage(broker, pageTable, confSettings);

 		}

 		if (id == null) return null;

@@ -2545,22 +2546,22 @@
 	 * @param fileName

 	 * @return

 	 */    

-	protected boolean alreadyAttached(String fileName) {

-		if (this.attachedFiles == null || this.attachedFiles.isEmpty())

-			return false;

-		Iterator <String>it=attachedFiles.iterator();

-		while (it.hasNext())

-		{

-			String item=it.next();

-			int index=item.lastIndexOf(fileName);

-			if (index < 0)

-				continue;

-			if (item.length() - index == fileName.length())

-				return true;		

-		}

-		return false;

-

-	}

+//	protected boolean alreadyAttached(String fileName) {

+//		if (this.attachedFiles == null || this.attachedFiles.isEmpty())

+//			return false;

+//		Iterator <String>it=attachedFiles.iterator();

+//		while (it.hasNext())

+//		{

+//			String item=it.next();

+//			int index=item.lastIndexOf(fileName);

+//			if (index < 0)

+//				continue;

+//			if (item.length() - index == fileName.length())

+//				return true;		

+//		}

+//		return false;

+//

+//	}

 

 	protected boolean orphanAlreadyAttached(File file) {

 		if (this.attachedPaths == null) return false;