some modifications dunno which ; )