Make new abstract type

Generalize functions to work across types