Fully functional. Needs testing though