Untested
Parts only
Need cleaned up