layered object model