--- /dev/null
+--- boost_1_33_1/boost/archive/iterators/escape.hpp.orig 2006-07-20 16:13:40.880579250 +0200
++++ boost_1_33_1/boost/archive/iterators/escape.hpp 2006-07-20 16:13:54.897455250 +0200
+@@ -37,7 +37,8 @@
+ BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type,
+ single_pass_traversal_tag,
+ BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type
+- >{
++ >
++{
+ typedef BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type base_value_type;
+ typedef BOOST_DEDUCED_TYPENAME boost::iterator_reference<Base>::type reference_type;
+ friend class boost::iterator_core_access;
+@@ -53,16 +54,29 @@
+ typedef escape<Derived, Base> this_t;
+
+ bool equal(const this_t & rhs) const {
+- return
+- NULL == m_bnext
+- && NULL == m_bend
+- && this->base_reference() == rhs.base_reference()
+- ;
++ if(m_full && ! rhs.m_full)
++ rhs.dereference();
++ else
++ if(! m_full && rhs.m_full)
++ dereference();
++ if(m_bnext != rhs.m_bnext)
++ return false;
++ if(this->base_reference() != rhs.base_reference())
++ return false;
++ return true;
++ }
++
++ reference_type dereference_impl() {
++ if(!m_full){
++ m_current_value = static_cast<Derived *>(this)->fill(m_bnext, m_bend);
++ m_full = true;
++ }
++ return m_current_value;
+ }
+
+ //Access the value referred to
+ reference_type dereference() const {
+- return m_current_value;
++ return const_cast<this_t *>(this)->dereference_impl();
+ }
+
+ void increment(){
+@@ -73,21 +87,21 @@
+ ++(this->base_reference());
+ m_bnext = NULL;
+ m_bend = NULL;
+- m_current_value = (static_cast<Derived *>(this))->fill(m_bnext, m_bend);
++ m_full = false;
+ }
+
+ // buffer to handle pending characters
+ const base_value_type *m_bnext;
+ const base_value_type *m_bend;
+- BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type m_current_value;
+ bool m_full;
++ BOOST_DEDUCED_TYPENAME boost::iterator_value<Base>::type m_current_value;
+ public:
+ escape(Base base) :
+ super_t(base),
+ m_bnext(NULL),
+- m_bend(NULL)
++ m_bend(NULL),
++ m_full(false)
+ {
+- m_current_value = static_cast<Derived *>(this)->fill(m_bnext, m_bend);
+ }
+ };
+