add better layout framework