you should take an option object: 
```
{
  icon: icon,
  success: function,
  error: function
}
```

instead of calling directly some icon's functions

I feel like loadCachedIcon and loadImageData are more "private" and should not be called directly.