modified by myself on github