may have introduced errors, but OK