mainly optimization ~3h