#5 abstract layer added