TODO: externalize for(k..) loop