private static String calculateRelativePath(Vector<String> homeList, Vector<String> unknownList) {

        // Step 1: Walk the ends of the lists to find the common root between the two lists
        // Step 2: Walk what remains of the homeList do determine how much to add backwards traversals (ie: ../ )
        // Step 3: Add the remains of the unknownList

        int homeIndex = homeList.size() - 1;
        int unknownIndex = unknownList.size() - 1;
        StringBuffer returnVal = new StringBuffer("");

        // Step 1: determine common root.
        while ((homeIndex >= 0) && (unknownIndex >= 0) && homeList.get(homeIndex).equals(unknownList.get(unknownIndex))) {
            // the root matches, move past it
            homeIndex--;
            unknownIndex--;
        }

        // Step 2: walk remainder of homeList (but ignore the filename)
        for (int i = homeIndex; i >= 1; i--) {
            returnVal.append("..");
            returnVal.append(File.separator);
        }

        // Step 3: Stick the remains of unknownList onto returnVal
        for (int i = unknownIndex; i >= 0; i--) {
            returnVal.append(unknownList.get(i).toString());
            if (i > 0) {
                returnVal.append(File.separator);
            }
        }

        //   System.out.println("Relative Path:" + returnVal);

        return returnVal.toString();
    }