refactored tool virtual methods a bit, they're cleaner now