Make AbstractTool Generic