new UI page framework - fixes #5