moved to fully abstract structure