basic framework is functional