basic implementation outline