functional version, free cam is still buggy though