translating by @Zanux