do some type abstract, still fairly ugly