Object orientated version