Added an abstractAgent for easier coding