implementation skeleton