works if used properly, errors make bad things happen