Cleaned up source, context will be created if null/undefined is passed