rebased to remove unused framework commits