text: diff --git a/lib/_stream_duplex.js b/lib/_stream_duplex.js
  index c5a741c..a2e0d8e 100644
  --- a/lib/_stream_duplex.js
  +++ b/lib/_stream_duplex.js
  @@ -26,8 +26,8 @@
   
   module.exports = Duplex;
   var util = require('util');
  -var Readable = require('_stream_readable');
  -var Writable = require('_stream_writable');
  +var Readable = require('./_stream_readable');
  +var Writable = require('./_stream_writable');
   
   util.inherits(Duplex, Readable);
   
  diff --git a/lib/_stream_passthrough.js b/lib/_stream_passthrough.js
  index a5e9864..330c247 100644
  --- a/lib/_stream_passthrough.js
  +++ b/lib/_stream_passthrough.js
  @@ -25,7 +25,7 @@
   
   module.exports = PassThrough;
   
  -var Transform = require('_stream_transform');
  +var Transform = require('./_stream_transform');
   var util = require('util');
   util.inherits(PassThrough, Transform);
   
  diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js
  index 0c3fe3e..90a8298 100644
  --- a/lib/_stream_readable.js
  +++ b/lib/_stream_readable.js
  @@ -23,10 +23,34 @@ module.exports = Readable;
   Readable.ReadableState = ReadableState;
   
   var EE = require('events').EventEmitter;
  +if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
  +  return emitter.listeners(type).length;
  +};
  +
  +if (!global.setImmediate) global.setImmediate = function setImmediate(fn) {
  +  return setTimeout(fn, 0);
  +};
  +if (!global.clearImmediate) global.clearImmediate = function clearImmediate(i) {
  +  return clearTimeout(i);
  +};
  +
   var Stream = require('stream');
   var util = require('util');
  +if (!util.isUndefined) {
  +  var utilIs = require('core-util-is');
  +  for (var f in utilIs) {
  +    util[f] = utilIs[f];
  +  }
  +}
   var StringDecoder;
  -var debug = util.debuglog('stream');
  +var debug;
  +if (util.debuglog)
  +  debug = util.debuglog('stream');
  +else try {
  +  debug = require('debuglog')('stream');
  +} catch (er) {
  +  debug = function() {};
  +}
   
   util.inherits(Readable, Stream);
   
  @@ -380,7 +404,7 @@ function chunkInvalid(state, chunk) {
   
   
   function onEofChunk(stream, state) {
  -  if (state.decoder && !state.ended) {
  +  if (state.decoder && !state.ended && state.decoder.end) {
       var chunk = state.decoder.end();
       if (chunk && chunk.length) {
         state.buffer.push(chunk);
  diff --git a/lib/_stream_transform.js b/lib/_stream_transform.js
  index b1f9fcc..b0caf57 100644
  --- a/lib/_stream_transform.js
  +++ b/lib/_stream_transform.js
  @@ -64,8 +64,14 @@
   
   module.exports = Transform;
   
  -var Duplex = require('_stream_duplex');
  +var Duplex = require('./_stream_duplex');
   var util = require('util');
  +if (!util.isUndefined) {
  +  var utilIs = require('core-util-is');
  +  for (var f in utilIs) {
  +    util[f] = utilIs[f];
  +  }
  +}
   util.inherits(Transform, Duplex);
   
   
  diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js
  index ba2e920..f49288b 100644
  --- a/lib/_stream_writable.js
  +++ b/lib/_stream_writable.js
  @@ -27,6 +27,12 @@ module.exports = Writable;
   Writable.WritableState = WritableState;
   
   var util = require('util');
  +if (!util.isUndefined) {
  +  var utilIs = require('core-util-is');
  +  for (var f in utilIs) {
  +    util[f] = utilIs[f];
  +  }
  +}
   var Stream = require('stream');
   
   util.inherits(Writable, Stream);
  @@ -119,7 +125,7 @@ function WritableState(options, stream) {
   function Writable(options) {
     // Writable ctor is applied to Duplexes, though they're not
     // instanceof Writable, they're instanceof Readable.
  -  if (!(this instanceof Writable) && !(this instanceof Stream.Duplex))
  +  if (!(this instanceof Writable) && !(this instanceof require('./_stream_duplex')))
       return new Writable(options);
   
     this._writableState = new WritableState(options, this);
  diff --git a/test/simple/test-stream-big-push.js b/test/simple/test-stream-big-push.js
  index e3787e4..8cd2127 100644
  --- a/test/simple/test-stream-big-push.js
  +++ b/test/simple/test-stream-big-push.js
  @@ -21,7 +21,7 @@
   
   var common = require('../common');
   var assert = require('assert');
  -var stream = require('stream');
  +var stream = require('../../');
   var str = 'asdfasdfasdfasdfasdf';
   
   var r = new stream.Readable({
  diff --git a/test/simple/test-stream-end-paused.js b/test/simple/test-stream-end-paused.js
  index bb73777..d40efc7 100644
  --- a/test/simple/test-stream-end-paused.js
  +++ b/test/simple/test-stream-end-paused.js
  @@ -25,7 +25,7 @@ var gotEnd = false;
   
   // Make sure we don't miss the end event for paused 0-length streams
   
  -var Readable = require('stream').Readable;
  +var Readable = require('../../').Readable;
   var stream = new Readable();
   var calledRead = false;
   stream._read = function() {
  diff --git a/test/simple/test-stream-pipe-after-end.js b/test/simple/test-stream-pipe-after-end.js
  index b46ee90..0be8366 100644
  --- a/test/simple/test-stream-pipe-after-end.js
  +++ b/test/simple/test-stream-pipe-after-end.js
  @@ -22,8 +22,8 @@
   var common = require('../common');
   var assert = require('assert');
   
  -var Readable = require('_stream_readable');
  -var Writable = require('_stream_writable');
  +var Readable = require('../../lib/_stream_readable');
  +var Writable = require('../../lib/_stream_writable');
   var util = require('util');
   
   util.inherits(TestReadable, Readable);
  diff --git a/test/simple/test-stream-pipe-cleanup.js b/test/simple/test-stream-pipe-cleanup.js
  deleted file mode 100644
  index f689358..0000000
  --- a/test/simple/test-stream-pipe-cleanup.js
  +++ /dev/null
  @@ -1,122 +0,0 @@
  -// Copyright Joyent, Inc. and other Node contributors.
  -//
  -// Permission is hereby granted, free of charge, to any person obtaining a
  -// copy of this software and associated documentation files (the
  -// "Software"), to deal in the Software without restriction, including
  -// without limitation the rights to use, copy, modify, merge, publish,
  -// distribute, sublicense, and/or sell copies of the Software, and to permit
  -// persons to whom the Software is furnished to do so, subject to the
  -// following conditions:
  -//
  -// The above copyright notice and this permission notice shall be included
  -// in all copies or substantial portions of the Software.
  -//
  -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  -// USE OR OTHER DEALINGS IN THE SOFTWARE.
  -
  -// This test asserts that Stream.prototype.pipe does not leave listeners
  -// hanging on the source or dest.
  -
  -var common = require('../common');
  -var stream = require('stream');
  -var assert = require('assert');
  -var util = require('util');
  -
  -function Writable() {
  -  this.writable = true;
  -  this.endCalls = 0;
  -  stream.Stream.call(this);
  -}
  -util.inherits(Writable, stream.Stream);
  -Writable.prototype.end = function() {
  -  this.endCalls++;
  -};
  -
  -Writable.prototype.destroy = function() {
  -  this.endCalls++;
  -};
  -
  -function Readable() {
  -  this.readable = true;
  -  stream.Stream.call(this);
  -}
  -util.inherits(Readable, stream.Stream);
  -
  -function Duplex() {
  -  this.readable = true;
  -  Writable.call(this);
  -}
  -util.inherits(Duplex, Writable);
  -
  -var i = 0;
  -var limit = 100;
  -
  -var w = new Writable();
  -
  -var r;
  -
  -for (i = 0; i < limit; i++) {
  -  r = new Readable();
  -  r.pipe(w);
  -  r.emit('end');
  -}
  -assert.equal(0, r.listeners('end').length);
  -assert.equal(limit, w.endCalls);
  -
  -w.endCalls = 0;
  -
  -for (i = 0; i < limit; i++) {
  -  r = new Readable();
  -  r.pipe(w);
  -  r.emit('close');
  -}
  -assert.equal(0, r.listeners('close').length);
  -assert.equal(limit, w.endCalls);
  -
  -w.endCalls = 0;
  -
  -r = new Readable();
  -
  -for (i = 0; i < limit; i++) {
  -  w = new Writable();
  -  r.pipe(w);
  -  w.emit('close');
  -}
  -assert.equal(0, w.listeners('close').length);
  -
  -r = new Readable();
  -w = new Writable();
  -var d = new Duplex();
  -r.pipe(d); // pipeline A
  -d.pipe(w); // pipeline B
  -assert.equal(r.listeners('end').length, 2);   // A.onend, A.cleanup
  -assert.equal(r.listeners('close').length, 2); // A.onclose, A.cleanup
  -assert.equal(d.listeners('end').length, 2);   // B.onend, B.cleanup
  -assert.equal(d.listeners('close').length, 3); // A.cleanup, B.onclose, B.cleanup
  -assert.equal(w.listeners('end').length, 0);
  -assert.equal(w.listeners('close').length, 1); // B.cleanup
  -
  -r.emit('end');
  -assert.equal(d.endCalls, 1);
  -assert.equal(w.endCalls, 0);
  -assert.equal(r.listeners('end').length, 0);
  -assert.equal(r.listeners('close').length, 0);
  -assert.equal(d.listeners('end').length, 2);   // B.onend, B.cleanup
  -assert.equal(d.listeners('close').length, 2); // B.onclose, B.cleanup
  -assert.equal(w.listeners('end').length, 0);
  -assert.equal(w.listeners('close').length, 1); // B.cleanup
  -
  -d.emit('end');
  -assert.equal(d.endCalls, 1);
  -assert.equal(w.endCalls, 1);
  -assert.equal(r.listeners('end').length, 0);
  -assert.equal(r.listeners('close').length, 0);
  -assert.equal(d.listeners('end').length, 0);
  -assert.equal(d.listeners('close').length, 0);
  -assert.equal(w.listeners('end').length, 0);
  -assert.equal(w.listeners('close').length, 0);
  diff --git a/test/simple/test-stream-pipe-error-handling.js b/test/simple/test-stream-pipe-error-handling.js
  index c5d724b..c7d6b7d 100644
  --- a/test/simple/test-stream-pipe-error-handling.js
  +++ b/test/simple/test-stream-pipe-error-handling.js
  @@ -21,7 +21,7 @@
   
   var common = require('../common');
   var assert = require('assert');
  -var Stream = require('stream').Stream;
  +var Stream = require('../../').Stream;
   
   (function testErrorListenerCatches() {
     var source = new Stream();
  diff --git a/test/simple/test-stream-pipe-event.js b/test/simple/test-stream-pipe-event.js
  index cb9d5fe..56f8d61 100644
  --- a/test/simple/test-stream-pipe-event.js
  +++ b/test/simple/test-stream-pipe-event.js
  @@ -20,7 +20,7 @@
   // USE OR OTHER DEALINGS IN THE SOFTWARE.
   
   var common = require('../common');
  -var stream = require('stream');
  +var stream = require('../../');
   var assert = require('assert');
   var util = require('util');
   
  diff --git a/test/simple/test-stream-push-order.js b/test/simple/test-stream-push-order.js
  index f2e6ec2..a5c9bf9 100644
  --- a/test/simple/test-stream-push-order.js
  +++ b/test/simple/test-stream-push-order.js
  @@ -20,7 +20,7 @@
   // USE OR OTHER DEALINGS IN THE SOFTWARE.
   
   var common = require('../common.js');
  -var Readable = require('stream').Readable;
  +var Readable = require('../../').Readable;
   var assert = require('assert');
   
   var s = new Readable({
  diff --git a/test/simple/test-stream-push-strings.js b/test/simple/test-stream-push-strings.js
  index 06f43dc..1701a9a 100644
  --- a/test/simple/test-stream-push-strings.js
  +++ b/test/simple/test-stream-push-strings.js
  @@ -22,7 +22,7 @@
   var common = require('../common');
   var assert = require('assert');
   
  -var Readable = require('stream').Readable;
  +var Readable = require('../../').Readable;
   var util = require('util');
   
   util.inherits(MyStream, Readable);
  diff --git a/test/simple/test-stream-readable-event.js b/test/simple/test-stream-readable-event.js
  index ba6a577..a8e6f7b 100644
  --- a/test/simple/test-stream-readable-event.js
  +++ b/test/simple/test-stream-readable-event.js
  @@ -22,7 +22,7 @@
   var common = require('../common');
   var assert = require('assert');
   
  -var Readable = require('stream').Readable;
  +var Readable = require('../../').Readable;
   
   (function first() {
     // First test, not reading when the readable is added.
  diff --git a/test/simple/test-stream-readable-flow-recursion.js b/test/simple/test-stream-readable-flow-recursion.js
  index 2891ad6..11689ba 100644
  --- a/test/simple/test-stream-readable-flow-recursion.js
  +++ b/test/simple/test-stream-readable-flow-recursion.js
  @@ -27,7 +27,7 @@ var assert = require('assert');
   // more data continuously, but without triggering a nextTick
   // warning or RangeError.
   
  -var Readable = require('stream').Readable;
  +var Readable = require('../../').Readable;
   
   // throw an error if we trigger a nextTick warning.
   process.throwDeprecation = true;
  diff --git a/test/simple/test-stream-unshift-empty-chunk.js b/test/simple/test-stream-unshift-empty-chunk.js
  index 0c96476..7827538 100644
  --- a/test/simple/test-stream-unshift-empty-chunk.js
  +++ b/test/simple/test-stream-unshift-empty-chunk.js
  @@ -24,7 +24,7 @@ var assert = require('assert');
   
   // This test verifies that stream.unshift(Buffer(0)) or 
   // stream.unshift('') does not set state.reading=false.
  -var Readable = require('stream').Readable;
  +var Readable = require('../../').Readable;
   
   var r = new Readable();
   var nChunks = 10;
  diff --git a/test/simple/test-stream-unshift-read-race.js b/test/simple/test-stream-unshift-read-race.js
  index 83fd9fa..17c18aa 100644
  --- a/test/simple/test-stream-unshift-read-race.js
  +++ b/test/simple/test-stream-unshift-read-race.js
  @@ -29,7 +29,7 @@ var assert = require('assert');
   // 3. push() after the EOF signaling null is an error.
   // 4. _read() is not called after pushing the EOF null chunk.
   
  -var stream = require('stream');
  +var stream = require('../../');
   var hwm = 10;
   var r = stream.Readable({ highWaterMark: hwm });
   var chunks = 10;
  @@ -51,7 +51,14 @@ r._read = function(n) {
   
     function push(fast) {
       assert(!pushedNull, 'push() after null push');
  -    var c = pos >= data.length ? null : data.slice(pos, pos + n);
  +    var c;
  +    if (pos >= data.length)
  +      c = null;
  +    else {
  +      if (n + pos > data.length)
  +        n = data.length - pos;
  +      c = data.slice(pos, pos + n);
  +    }
       pushedNull = c === null;
       if (fast) {
         pos += n;
  diff --git a/test/simple/test-stream-writev.js b/test/simple/test-stream-writev.js
  index 5b49e6e..b5321f3 100644
  --- a/test/simple/test-stream-writev.js
  +++ b/test/simple/test-stream-writev.js
  @@ -22,7 +22,7 @@
   var common = require('../common');
   var assert = require('assert');
   
  -var stream = require('stream');
  +var stream = require('../../');
   
   var queue = [];
   for (var decode = 0; decode < 2; decode++) {
  diff --git a/test/simple/test-stream2-basic.js b/test/simple/test-stream2-basic.js
  index 3814bf0..248c1be 100644
  --- a/test/simple/test-stream2-basic.js
  +++ b/test/simple/test-stream2-basic.js
  @@ -21,7 +21,7 @@
   
   
   var common = require('../common.js');
  -var R = require('_stream_readable');
  +var R = require('../../lib/_stream_readable');
   var assert = require('assert');
   
   var util = require('util');
  diff --git a/test/simple/test-stream2-compatibility.js b/test/simple/test-stream2-compatibility.js
  index 6cdd4e9..f0fa84b 100644
  --- a/test/simple/test-stream2-compatibility.js
  +++ b/test/simple/test-stream2-compatibility.js
  @@ -21,7 +21,7 @@
   
   
   var common = require('../common.js');
  -var R = require('_stream_readable');
  +var R = require('../../lib/_stream_readable');
   var assert = require('assert');
   
   var util = require('util');
  diff --git a/test/simple/test-stream2-finish-pipe.js b/test/simple/test-stream2-finish-pipe.js
  index 39b274f..006a19b 100644
  --- a/test/simple/test-stream2-finish-pipe.js
  +++ b/test/simple/test-stream2-finish-pipe.js
  @@ -20,7 +20,7 @@
   // USE OR OTHER DEALINGS IN THE SOFTWARE.
   
   var common = require('../common.js');
  -var stream = require('stream');
  +var stream = require('../../');
   var Buffer = require('buffer').Buffer;
   
   var r = new stream.Readable();
  diff --git a/test/simple/test-stream2-fs.js b/test/simple/test-stream2-fs.js
  deleted file mode 100644
  index e162406..0000000
  --- a/test/simple/test-stream2-fs.js
  +++ /dev/null
  @@ -1,72 +0,0 @@
  -// Copyright Joyent, Inc. and other Node contributors.
  -//
  -// Permission is hereby granted, free of charge, to any person obtaining a
  -// copy of this software and associated documentation files (the
  -// "Software"), to deal in the Software without restriction, including
  -// without limitation the rights to use, copy, modify, merge, publish,
  -// distribute, sublicense, and/or sell copies of the Software, and to permit
  -// persons to whom the Software is furnished to do so, subject to the
  -// following conditions:
  -//
  -// The above copyright notice and this permission notice shall be included
  -// in all copies or substantial portions of the Software.
  -//
  -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  -// USE OR OTHER DEALINGS IN THE SOFTWARE.
  -
  -
  -var common = require('../common.js');
  -var R = require('_stream_readable');
  -var assert = require('assert');
  -
  -var fs = require('fs');
  -var FSReadable = fs.ReadStream;
  -
  -var path = require('path');
  -var file = path.resolve(common.fixturesDir, 'x1024.txt');
  -
  -var size = fs.statSync(file).size;
  -
  -var expectLengths = [1024];
  -
  -var util = require('util');
  -var Stream = require('stream');
  -
  -util.inherits(TestWriter, Stream);
  -
  -function TestWriter() {
  -  Stream.apply(this);
  -  this.buffer = [];
  -  this.length = 0;
  -}
  -
  -TestWriter.prototype.write = function(c) {
  -  this.buffer.push(c.toString());
  -  this.length += c.length;
  -  return true;
  -};
  -
  -TestWriter.prototype.end = function(c) {
  -  if (c) this.buffer.push(c.toString());
  -  this.emit('results', this.buffer);
  -}
  -
  -var r = new FSReadable(file);
  -var w = new TestWriter();
  -
  -w.on('results', function(res) {
  -  console.error(res, w.length);
  -  assert.equal(w.length, size);
  -  var l = 0;
  -  assert.deepEqual(res.map(function (c) {
  -    return c.length;
  -  }), expectLengths);
  -  console.log('ok');
  -});
  -
  -r.pipe(w);
  diff --git a/test/simple/test-stream2-httpclient-response-end.js b/test/simple/test-stream2-httpclient-response-end.js
  deleted file mode 100644
  index 15cffc2..0000000
  --- a/test/simple/test-stream2-httpclient-response-end.js
  +++ /dev/null
  @@ -1,52 +0,0 @@
  -// Copyright Joyent, Inc. and other Node contributors.
  -//
  -// Permission is hereby granted, free of charge, to any person obtaining a
  -// copy of this software and associated documentation files (the
  -// "Software"), to deal in the Software without restriction, including
  -// without limitation the rights to use, copy, modify, merge, publish,
  -// distribute, sublicense, and/or sell copies of the Software, and to permit
  -// persons to whom the Software is furnished to do so, subject to the
  -// following conditions:
  -//
  -// The above copyright notice and this permission notice shall be included
  -// in all copies or substantial portions of the Software.
  -//
  -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  -// USE OR OTHER DEALINGS IN THE SOFTWARE.
  -
  -var common = require('../common.js');
  -var assert = require('assert');
  -var http = require('http');
  -var msg = 'Hello';
  -var readable_event = false;
  -var end_event = false;
  -var server = http.createServer(function(req, res) {
  -  res.writeHead(200, {'Content-Type': 'text/plain'});
  -  res.end(msg);
  -}).listen(common.PORT, function() {
  -  http.get({port: common.PORT}, function(res) {
  -    var data = '';
  -    res.on('readable', function() {
  -      console.log('readable event');
  -      readable_event = true;
  -      data += res.read();
  -    });
  -    res.on('end', function() {
  -      console.log('end event');
  -      end_event = true;
  -      assert.strictEqual(msg, data);
  -      server.close();
  -    });
  -  });
  -});
  -
  -process.on('exit', function() {
  -  assert(readable_event);
  -  assert(end_event);
  -});
  -
  diff --git a/test/simple/test-stream2-large-read-stall.js b/test/simple/test-stream2-large-read-stall.js
  index 2fbfbca..667985b 100644
  --- a/test/simple/test-stream2-large-read-stall.js
  +++ b/test/simple/test-stream2-large-read-stall.js
  @@ -30,7 +30,7 @@ var PUSHSIZE = 20;
   var PUSHCOUNT = 1000;
   var HWM = 50;
   
  -var Readable = require('stream').Readable;
  +var Readable = require('../../').Readable;
   var r = new Readable({
     highWaterMark: HWM
   });
  @@ -39,23 +39,23 @@ var rs = r._readableState;
   r._read = push;
   
   r.on('readable', function() {
  -  console.error('>> readable');
  +  //console.error('>> readable');
     do {
  -    console.error('  > read(%d)', READSIZE);
  +    //console.error('  > read(%d)', READSIZE);
       var ret = r.read(READSIZE);
  -    console.error('  < %j (%d remain)', ret && ret.length, rs.length);
  +    //console.error('  < %j (%d remain)', ret && ret.length, rs.length);
     } while (ret && ret.length === READSIZE);
   
  -  console.error('<< after read()',
  -                ret && ret.length,
  -                rs.needReadable,
  -                rs.length);
  +  //console.error('<< after read()',
  +  //              ret && ret.length,
  +  //              rs.needReadable,
  +  //              rs.length);
   });
   
   var endEmitted = false;
   r.on('end', function() {
     endEmitted = true;
  -  console.error('end');
  +  //console.error('end');
   });
   
   var pushes = 0;
  @@ -64,11 +64,11 @@ function push() {
       return;
   
     if (pushes++ === PUSHCOUNT) {
  -    console.error('   push(EOF)');
  +    //console.error('   push(EOF)');
       return r.push(null);
     }
   
  -  console.error('   push #%d', pushes);
  +  //console.error('   push #%d', pushes);
     if (r.push(new Buffer(PUSHSIZE)))
       setTimeout(push);
   }
  diff --git a/test/simple/test-stream2-objects.js b/test/simple/test-stream2-objects.js
  index 3e6931d..ff47d89 100644
  --- a/test/simple/test-stream2-objects.js
  +++ b/test/simple/test-stream2-objects.js
  @@ -21,8 +21,8 @@
   
   
   var common = require('../common.js');
  -var Readable = require('_stream_readable');
  -var Writable = require('_stream_writable');
  +var Readable = require('../../lib/_stream_readable');
  +var Writable = require('../../lib/_stream_writable');
   var assert = require('assert');
   
   // tiny node-tap lookalike.
  diff --git a/test/simple/test-stream2-pipe-error-handling.js b/test/simple/test-stream2-pipe-error-handling.js
  index cf7531c..e3f3e4e 100644
  --- a/test/simple/test-stream2-pipe-error-handling.js
  +++ b/test/simple/test-stream2-pipe-error-handling.js
  @@ -21,7 +21,7 @@
   
   var common = require('../common');
   var assert = require('assert');
  -var stream = require('stream');
  +var stream = require('../../');
   
   (function testErrorListenerCatches() {
     var count = 1000;
  diff --git a/test/simple/test-stream2-pipe-error-once-listener.js b/test/simple/test-stream2-pipe-error-once-listener.js
  index 5e8e3cb..53b2616 100755
  --- a/test/simple/test-stream2-pipe-error-once-listener.js
  +++ b/test/simple/test-stream2-pipe-error-once-listener.js
  @@ -24,7 +24,7 @@ var common = require('../common.js');
   var assert = require('assert');
   
   var util = require('util');
  -var stream = require('stream');
  +var stream = require('../../');
   
   
   var Read = function() {
  diff --git a/test/simple/test-stream2-push.js b/test/simple/test-stream2-push.js
  index b63edc3..eb2b0e9 100644
  --- a/test/simple/test-stream2-push.js
  +++ b/test/simple/test-stream2-push.js
  @@ -20,7 +20,7 @@
   // USE OR OTHER DEALINGS IN THE SOFTWARE.
   
   var common = require('../common.js');
  -var stream = require('stream');
  +var stream = require('../../');
   var Readable = stream.Readable;
   var Writable = stream.Writable;
   var assert = require('assert');
  diff --git a/test/simple/test-stream2-read-sync-stack.js b/test/simple/test-stream2-read-sync-stack.js
  index e8a7305..9740a47 100644
  --- a/test/simple/test-stream2-read-sync-stack.js
  +++ b/test/simple/test-stream2-read-sync-stack.js
  @@ -21,7 +21,7 @@
   
   var common = require('../common');
   var assert = require('assert');
  -var Readable = require('stream').Readable;
  +var Readable = require('../../').Readable;
   var r = new Readable();
   var N = 256 * 1024;
   
  diff --git a/test/simple/test-stream2-readable-empty-buffer-no-eof.js b/test/simple/test-stream2-readable-empty-buffer-no-eof.js
  index cd30178..4b1659d 100644
  --- a/test/simple/test-stream2-readable-empty-buffer-no-eof.js
  +++ b/test/simple/test-stream2-readable-empty-buffer-no-eof.js
  @@ -22,10 +22,9 @@
   var common = require('../common');
   var assert = require('assert');
   
  -var Readable = require('stream').Readable;
  +var Readable = require('../../').Readable;
   
   test1();
  -test2();
   
   function test1() {
     var r = new Readable();
  @@ -88,31 +87,3 @@ function test1() {
       console.log('ok');
     });
   }
  -
  -function test2() {
  -  var r = new Readable({ encoding: 'base64' });
  -  var reads = 5;
  -  r._read = function(n) {
  -    if (!reads--)
  -      return r.push(null); // EOF
  -    else
  -      return r.push(new Buffer('x'));
  -  };
  -
  -  var results = [];
  -  function flow() {
  -    var chunk;
  -    while (null !== (chunk = r.read()))
  -      results.push(chunk + '');
  -  }
  -  r.on('readable', flow);
  -  r.on('end', function() {
  -    results.push('EOF');
  -  });
  -  flow();
  -
  -  process.on('exit', function() {
  -    assert.deepEqual(results, [ 'eHh4', 'eHg=', 'EOF' ]);
  -    console.log('ok');
  -  });
  -}
  diff --git a/test/simple/test-stream2-readable-from-list.js b/test/simple/test-stream2-readable-from-list.js
  index 7c96ffe..04a96f5 100644
  --- a/test/simple/test-stream2-readable-from-list.js
  +++ b/test/simple/test-stream2-readable-from-list.js
  @@ -21,7 +21,7 @@
   
   var assert = require('assert');
   var common = require('../common.js');
  -var fromList = require('_stream_readable')._fromList;
  +var fromList = require('../../lib/_stream_readable')._fromList;
   
   // tiny node-tap lookalike.
   var tests = [];
  diff --git a/test/simple/test-stream2-readable-legacy-drain.js b/test/simple/test-stream2-readable-legacy-drain.js
  index 675da8e..51fd3d5 100644
  --- a/test/simple/test-stream2-readable-legacy-drain.js
  +++ b/test/simple/test-stream2-readable-legacy-drain.js
  @@ -22,7 +22,7 @@
   var common = require('../common');
   var assert = require('assert');
   
  -var Stream = require('stream');
  +var Stream = require('../../');
   var Readable = Stream.Readable;
   
   var r = new Readable();
  diff --git a/test/simple/test-stream2-readable-non-empty-end.js b/test/simple/test-stream2-readable-non-empty-end.js
  index 7314ae7..c971898 100644
  --- a/test/simple/test-stream2-readable-non-empty-end.js
  +++ b/test/simple/test-stream2-readable-non-empty-end.js
  @@ -21,7 +21,7 @@
   
   var assert = require('assert');
   var common = require('../common.js');
  -var Readable = require('_stream_readable');
  +var Readable = require('../../lib/_stream_readable');
   
   var len = 0;
   var chunks = new Array(10);
  diff --git a/test/simple/test-stream2-readable-wrap-empty.js b/test/simple/test-stream2-readable-wrap-empty.js
  index 2e5cf25..fd8a3dc 100644
  --- a/test/simple/test-stream2-readable-wrap-empty.js
  +++ b/test/simple/test-stream2-readable-wrap-empty.js
  @@ -22,7 +22,7 @@
   var common = require('../common');
   var assert = require('assert');
   
  -var Readable = require('_stream_readable');
  +var Readable = require('../../lib/_stream_readable');
   var EE = require('events').EventEmitter;
   
   var oldStream = new EE();
  diff --git a/test/simple/test-stream2-readable-wrap.js b/test/simple/test-stream2-readable-wrap.js
  index 90eea01..6b177f7 100644
  --- a/test/simple/test-stream2-readable-wrap.js
  +++ b/test/simple/test-stream2-readable-wrap.js
  @@ -22,8 +22,8 @@
   var common = require('../common');
   var assert = require('assert');
   
  -var Readable = require('_stream_readable');
  -var Writable = require('_stream_writable');
  +var Readable = require('../../lib/_stream_readable');
  +var Writable = require('../../lib/_stream_writable');
   var EE = require('events').EventEmitter;
   
   var testRuns = 0, completedRuns = 0;
  diff --git a/test/simple/test-stream2-set-encoding.js b/test/simple/test-stream2-set-encoding.js
  index 5d2c32a..685531b 100644
  --- a/test/simple/test-stream2-set-encoding.js
  +++ b/test/simple/test-stream2-set-encoding.js
  @@ -22,7 +22,7 @@
   
   var common = require('../common.js');
   var assert = require('assert');
  -var R = require('_stream_readable');
  +var R = require('../../lib/_stream_readable');
   var util = require('util');
   
   // tiny node-tap lookalike.
  diff --git a/test/simple/test-stream2-transform.js b/test/simple/test-stream2-transform.js
  index 9c9ddd8..a0cacc6 100644
  --- a/test/simple/test-stream2-transform.js
  +++ b/test/simple/test-stream2-transform.js
  @@ -21,8 +21,8 @@
   
   var assert = require('assert');
   var common = require('../common.js');
  -var PassThrough = require('_stream_passthrough');
  -var Transform = require('_stream_transform');
  +var PassThrough = require('../../').PassThrough;
  +var Transform = require('../../').Transform;
   
   // tiny node-tap lookalike.
   var tests = [];
  diff --git a/test/simple/test-stream2-unpipe-drain.js b/test/simple/test-stream2-unpipe-drain.js
  index d66dc3c..365b327 100644
  --- a/test/simple/test-stream2-unpipe-drain.js
  +++ b/test/simple/test-stream2-unpipe-drain.js
  @@ -22,7 +22,7 @@
   
   var common = require('../common.js');
   var assert = require('assert');
  -var stream = require('stream');
  +var stream = require('../../');
   var crypto = require('crypto');
   
   var util = require('util');
  diff --git a/test/simple/test-stream2-unpipe-leak.js b/test/simple/test-stream2-unpipe-leak.js
  index 99f8746..17c92ae 100644
  --- a/test/simple/test-stream2-unpipe-leak.js
  +++ b/test/simple/test-stream2-unpipe-leak.js
  @@ -22,7 +22,7 @@
   
   var common = require('../common.js');
   var assert = require('assert');
  -var stream = require('stream');
  +var stream = require('../../');
   
   var chunk = new Buffer('hallo');
   
  diff --git a/test/simple/test-stream2-writable.js b/test/simple/test-stream2-writable.js
  index 704100c..209c3a6 100644
  --- a/test/simple/test-stream2-writable.js
  +++ b/test/simple/test-stream2-writable.js
  @@ -20,8 +20,8 @@
   // USE OR OTHER DEALINGS IN THE SOFTWARE.
   
   var common = require('../common.js');
  -var W = require('_stream_writable');
  -var D = require('_stream_duplex');
  +var W = require('../../').Writable;
  +var D = require('../../').Duplex;
   var assert = require('assert');
   
   var util = require('util');
  diff --git a/test/simple/test-stream3-pause-then-read.js b/test/simple/test-stream3-pause-then-read.js
  index b91bde3..2f72c15 100644
  --- a/test/simple/test-stream3-pause-then-read.js
  +++ b/test/simple/test-stream3-pause-then-read.js
  @@ -22,7 +22,7 @@
   var common = require('../common');
   var assert = require('assert');
   
  -var stream = require('stream');
  +var stream = require('../../');
   var Readable = stream.Readable;
   var Writable = stream.Writable;
   
  