first pass at updated viewer implementation