private void EliminateDuplicates(List list, List states) { int statesSize = states.Count; for( int j = 0; j < statesSize; j++ ) { Console.WriteLine(states.Count); Console.WriteLine(j); Node temp = states[j]; foreach (Node n in list) { if (n.NodeState == temp.NodeState) { if (n.NodeHeuristic < temp.NodeHeuristic) { states.RemoveAt(j); break; } else { list.Remove(n); break; } } } } } My program with this function throws an exception in this function: Exception data: Unhandled Exception: System.ArgumentOutOfRangeException: Argument is out of range. Parameter name: index at System.Collections.Generic.List`1[AStar8Puzzle.Node].get_Item (Int32 ) [0x00024] in /build/buildd/mono-1.2.3.1/mcs/class/corlib/System.Collections.Generic/List.cs:546 at AStar8Puzzle.AStar8Puzzle.EliminateDuplicates (System.Collections.Generic.List`1 list, System.Collections.Generic.List`1 states) [0x0001f] in /home/bojan/programming/AStar8Puzzle/AStar8Puzzle/Main.cs:65 at AStar8Puzzle.AStar8Puzzle.SolvePuzzle (System.String startingConfig, Boolean printAll) [0x000aa] in /home/bojan/programming/AStar8Puzzle/AStar8Puzzle/Main.cs:45 at AStar8Puzzle.AStar8Puzzle.Main (System.String[] args) [0x0000c] in /home/bojan/programming/AStar8Puzzle/AStar8Puzzle/Main.cs:137 However, immediately prior, Console.WriteLine(states.Count) and Console.WriteLine(j) are both 1. So...what exactly is out of range?