still working on port of image abstraction