wrap everything in a IIFE