implemented extended version