basic tool implementation