puff implementation -- Start