more general types where possible