Fully functional. Needs Threads.