added campaign framework