added abstract structures and templates