! removed unneeded abstract classes, flatten architecture