support arbitrary block size in construction