Author: Pandan + help from Eryehk