some functions renamed for cleaner understanding