separate behaviors from content