added abstract tool class