re-writing all of this check back later