refactor to allow finer grained sizes (not just powers of 2 # of tiles)