added Agent class