extended implementation a bit