DOM abstraction layer