Intermediate Problem Solving and Data Structures : Walls and Mirrors