the basic framework