basic version with method