implement basic framework