attribution

reflect that part of the code is stolen from cjd