diff --git a/cint/reflex/inc/Reflex/internal/InternalTools.h b/cint/reflex/inc/Reflex/internal/InternalTools.h
index bcf5326264f6b102c82ac7a0e61265723e6d9d52..02112a061e00b713e05a8bae3076006fad94612c 100644
--- a/cint/reflex/inc/Reflex/internal/InternalTools.h
+++ b/cint/reflex/inc/Reflex/internal/InternalTools.h
@@ -25,26 +25,22 @@ namespace Reflex {
 
          template < typename CONT > 
          static typename std::vector<TO>::iterator Begin( const CONT & cont ) {
-            if ( ! cont.size()) return End<CONT>(cont);
-            else                return typename std::vector<TO>::iterator((TO*)&cont[0]);
+            return ((typename std::vector<TO> &)const_cast<CONT &>(cont)).begin();
          }
 
          template < typename CONT >
          static typename std::vector<TO>::iterator End( const CONT & cont ) {
-            typename std::vector<TO>::iterator it = typename std::vector<TO>::iterator((TO*)&cont[cont.size()-1]);
-            return it++;
+            return ((typename std::vector<TO> &)const_cast<CONT &>(cont)).end();
          }
 
          template < typename CONT > 
          static typename std::vector<TO>::const_reverse_iterator RBegin( const CONT & cont ) {
-            if ( ! cont.size()) return REnd<CONT>(cont);
-            else                return typename std::vector<TO>::const_reverse_iterator(typename std::vector<TO>::iterator((TO*)&cont[cont.size()-1]));
+            return ((typename std::vector<TO> &)cont).rbegin();
          }
 
          template < typename CONT >
          static typename std::vector<TO>::const_reverse_iterator REnd( const CONT & cont ) {
-            typename std::vector<TO>::iterator it = typename std::vector<TO>::iterator((TO*)&cont[0]);
-            return typename std::vector<TO>::const_reverse_iterator(it--);
+            return ((typename std::vector<TO> &)cont).rend();
          }
 
       };