Fostering Mathematical Thinking and Problem Solving