Almost there, something seems off, need to double check a few functions