credits to sharpdx added