explanation added, todo