add Flyweight courtesey of @ngauthier