private static Tuple<int[], EdgeIntersection[]> GetIslandsSprtTouching(int index, EdgeIntersection[] intersections)
            {
                List<int> returnIndices = new List<int>();
                List<EdgeIntersection> returnIntersections = new List<EdgeIntersection>();

                Stack<int> newIndices = new Stack<int>();

                // Put the intersections in a list, so it can be removed from as matches are found
                List<EdgeIntersection> remainingIntersections = intersections.ToList();

                // Start the working stack off with the index passed in
                newIndices.Push(index);

                while (newIndices.Count > 0)
                {
                    // Pop off the stack, and look for matches
                    int currentIndex = newIndices.Pop();
                    returnIndices.Add(currentIndex);

                    // Find unique intersections that match this current polygon, and put them in the working stack if they haven't been encountered yet
                    foreach (int match in GetIslandsSprtTouchingSprtExamine(remainingIntersections, returnIntersections, currentIndex))
                    {
                        if (!returnIndices.Contains(match) && !newIndices.Contains(match))
                        {
                            newIndices.Push(match);
                        }
                    }
                }

                // Exit Function
                return Tuple.Create(returnIndices.ToArray(), returnIntersections.ToArray());
            }