Improve streams

Also, shouldn't the parameters be `protected`?