copied some stuff from many places