split into three different parts