add view_adapter, simple self-contained version