Non-tested final version. Will bug test and check for errors.