filters now use reader/writer instead of iostream