diff --git a/bit_reader.go b/bit_reader.go
index <HASH>..<HASH> 100644
--- a/bit_reader.go
+++ b/bit_reader.go
@@ -45,6 +45,12 @@ type rarBitReader struct {
 	n uint
 }
 
+func (r *rarBitReader) reset(br io.ByteReader) {
+	r.r = br
+	r.n = 0
+	r.v = 0
+}
+
 func (r *rarBitReader) readBits(n uint) (int, error) {
 	for n > r.n {
 		c, err := r.r.ReadByte()
diff --git a/decode29.go b/decode29.go
index <HASH>..<HASH> 100644
--- a/decode29.go
+++ b/decode29.go
@@ -41,7 +41,11 @@ type decoder29 struct {
 
 // init intializes the decoder for decoding a new file.
 func (d *decoder29) init(r io.ByteReader, reset bool) error {
-	d.br = newRarBitReader(r)
+	if d.br == nil {
+		d.br = newRarBitReader(r)
+	} else {
+		d.br.reset(r)
+	}
 	d.eof = false
 	if reset {
 		d.initFilters()
fix problem with extracting <I> solid archives

When initializing the <I> decoder for a solid file in a solid archive,
the new rarBitReader wasnt getting passed to the lz & ppm decoders.
They would use the old reader which in some cases would still work
(because they use the same ByteReader).
 Now instead of creating a new one, just reset the existing one.