Added general implementation