thinking about how to make this fast, lots of ways for it to be very slow