A computer program product comprising computer program logic for use with a processor and/or programmable logic for use with a programmable logic device, which when executed by the processor and/or the programmable logic device, causes the processor and/or the programmable logic device to carry out a method for distributing write operations in a data storage system, the data storage system comprising plural storage devices and providing a storage space being provided as a span being a storage pool combining plural volumes, and the span being composed of a plurality of stripesets that logically provide the storage space as a contiguous storage space having plural sequentially numbered storage blocks, and each stripeset being composed from one or more of the plural volumes, and each volume being a virtual piece of storage space combining the storage capacity of plural storage devices, wherein the storage blocks map to physical storage locations within the span, and each stripeset is associated with a respective set of storage blocks which map to the respective stripeset, the method including: - providing a free block object indicative of a plurality of status indicators, each status indicator being associated with a respective storage block of the plural storage blocks and indicating availability for the respective storage block, the free block object indicating, for each storage block, whether the respective storage block is free or used, the free block object being a bit map having one or more status indicator bits per storage block, - searching through plural storage blocks by referring to the status indicators of the free block object in order to identify available storage blocks, and - controlling writing data to the identified available storage blocks, wherein the method includes logically dividing the free block object into a plurality of sections so that the status indicators of the free block object are grouped into the plurality of sections of the free block object, each of the sections being associated with one of the plurality of stripesets, and the plurality of status indicators of each section are grouped into a plurality of sub-sections, wherein searching through plural storage blocks in order to identify available storage blocks includes a non-sequential search which includes, for spreading write operations among the plurality of stripesets, jumping among the plurality of stripesets by, after searching through a sub-section of a first section of the free block object associated with a first stripeset, moving on to search through a sub-section of a second section of the free block object associated with a second stripeset, before searching through a next sub-section of the first section of the free block object associated with the first stripeset, wherein the method further comprises maintaining information including a size of each stripeset, a starting offset of each stripeset in the storage space, and an amount of space that should be searched in a stripeset before moving to the next stripeset, and further maintaining pointers in order to keep track of a search location in the bit map of the free block object, including a write pointer for each stripeset in order to maintain a search location in each stripeset and a global write pointer in order to maintain a current search location, and wherein the method further comprises, when the storage space is expanded by adding one or more new stripesets, expanding the free blocks object, wherein, upon addition of a new section of plural status indicators for indicating availability of a number of added storage blocks, the method includes proceeding to search through the added section until a predetermined threshold or condition is reached, the search through the added section including updating the global write pointer, when a new stripeset is added, to reference the newly added stripeset so as to begin using free storage blocks from the newly added stripeset, wherein, when the predetermined threshold or condition is reached, the non-sequential search begins or resumes. - providing a free block object indicative of a plurality of status indicators, each status indicator being associated with a respective storage block of the plural storage blocks and indicating availability for the respective storage block, the free block object indicating, for each storage block, whether the respective storage block is free or used, the free block object being a bit map having one or more status indicator bits per storage block, - searching through plural storage blocks by referring to the status indicators of the free block object in order to identify available storage blocks, and - controlling writing data to the identified available storage blocks,