first iteration of implementation
merged