Separate common implementation