finish up functionality work