add different types functionality