Full implementation