fleshed out functions needed