Updated with new files from @jdfwarrior