diff --git a/zstd_stream.go b/zstd_stream.go
index ce0137a..ea58155 100644
--- a/zstd_stream.go
+++ b/zstd_stream.go
@@ -182,7 +182,6 @@
 
 // Read satifies the io.Reader interface
 func (r *Reader) Read(p []byte) (int, error) {
-	var err error
 
 	// If we already have enough bytes, return
 	if r.dstBuffer.Len() >= len(p) {
@@ -192,36 +191,17 @@
 	for r.dstBuffer.Len() < len(p) {
 		// Populate src
 		src := r.compressionBuffer
-		if r.srcBuffer.Len() >= len(src) { // We don't need to read anything from src
-			_, err := r.srcBuffer.Read(src)
-			if err != nil {
-				return 0, fmt.Errorf("failed to read from srcBuffer: %s", err)
-			}
-		} else { // We need to read some data
-			n, err := io.ReadFull(r.underlyingReader, src)
-			if err == io.EOF {
-				if r.srcBuffer.Len() == 0 { // No more things to do
-					break
-				}
-			}
-			if err != nil && err != io.ErrUnexpectedEOF {
-				return 0, fmt.Errorf("failed to read underlying reader: %s", err)
-			}
-			// Create buffer
-			if r.srcBuffer.Len() == 0 { // Fast path: do not use srcBuffer
-				src = src[:n]
-			} else {
-				_, err = r.srcBuffer.Write(src[:n])
-				if err != nil {
-					return 0, fmt.Errorf("failed to write to temporary src buffer: %s", err)
-				}
-				n, err = r.srcBuffer.Read(src)
-				if err != nil {
-					return 0, fmt.Errorf("failed to read from temporary src buffer: %s", err)
-				}
-				src = src[:n]
-			}
+		reader := r.underlyingReader
+		if r.srcBuffer.Len() != 0 {
+			reader = io.MultiReader(&r.srcBuffer, r.underlyingReader)
 		}
+		n, err := io.ReadFull(reader, src)
+		if err == io.EOF {
+			break
+		} else if err != nil && err != io.ErrUnexpectedEOF {
+			return 0, fmt.Errorf("failed to read from underlying reader: %s", err)
+		}
+		src = src[:n]
 
 		// C code
 		cSrc := unsafe.Pointer(&src[0])
