skeleton implementation with test