Added IIFE in order to, you know, avoid global ns pollution