wrap a lot of internal stuff up further behind the interface