add optional buffered wrapper