the internals are messier but it's slightly nicer to work with