abstract done; first iteration