basic framework and functionality