start the actual implementation