diff --git a/Packets/ParseInt.ih b/Packets/ParseInt.ih
index 70c5859a588ae090048154484f7b705908417e49..fd58b04bcf6ef4902ae8271e77f4fdbc6bff4c65 100644
--- a/Packets/ParseInt.ih
+++ b/Packets/ParseInt.ih
@@ -71,6 +71,11 @@ namespace impl {
         Derived const & operator -- ()
             { derived().value( derived.value()-1 ); return derived(); }
 
+        Derived const & operator ++ (int)
+            { Value v (derived.value()); derived().value( v+1 ); return v; }
+        Derived const & operator -- (int)
+            { Value v (derived.value()); derived().value( v-1 ); return v; }
+
     private:
         Derived & derived() { return *static_cast<Derived *>(this); }
         Derived const & derived() const { return *static_cast<Derived const *>(this); };
diff --git a/Packets/ParserBase.cti b/Packets/ParserBase.cti
index 5ba7367e8881870d5b6e0d94607e836c9b062600..084c6253d99224c8f49d641fbba19863c9a963dc 100644
--- a/Packets/ParserBase.cti
+++ b/Packets/ParserBase.cti
@@ -22,7 +22,7 @@
 
 // Definition of inline template functions
 
-//#include "ParserBase.ih"
+#include "ParserBase.ih"
 
 // Custom includes
 
diff --git a/Packets/ParserBase.hh b/Packets/ParserBase.hh
index 69508b7cd3cb06d2cbd66b795494b66973ec90fa..cb2eccea7bd2aad49e24bbdea508da5e29578b18 100644
--- a/Packets/ParserBase.hh
+++ b/Packets/ParserBase.hh
@@ -29,6 +29,7 @@
 
 // Custom includes
 #include <utility>
+#include <boost/iterator/iterator_facade.hpp>
 #include <boost/type_traits/is_member_function_pointer.hpp>
 
 #include "ParserBase.ih"
@@ -39,7 +40,19 @@ namespace pkf {
     
     namespace impl { struct ParserBase; }
 
-    struct nil {};
+    struct nil 
+	: public boost::iterator_facade<nil,char,boost::random_access_traversal_tag>
+    {
+	// Theese are declared to make nil a valid iterator. All
+	// access to an instance of this iterator however is invalid
+	// (these members are not implemented only declared)
+	char & dereference() const;
+	bool equal(nil other) const;
+	void increment();
+	void decrement();
+	void advance(int n);
+	int distance_to(nil other) const;
+    };
 
     /** \brief Parser framework
 
diff --git a/Scheduler/Scheduler.cc b/Scheduler/Scheduler.cc
index 21885f24a8fd26bf6add1f5c1cbb0f10cf4d91f4..5e8a860835719e214a45f0723cb5291b34f7f3e8 100644
--- a/Scheduler/Scheduler.cc
+++ b/Scheduler/Scheduler.cc
@@ -90,7 +90,7 @@ prefix_ satcom::lib::Scheduler::Scheduler()
         throw SystemException(errno);
 }
 
-prefix_ void satcom::lib::Scheduler::add(int fd, Callback const & cb, EventId eventMask)
+prefix_ void satcom::lib::Scheduler::do_add(int fd, InternalCallback const & cb, EventId eventMask)
 {
     FdTable::iterator i (fdTable_.find(fd));
     int action (EPOLL_CTL_MOD);
@@ -114,7 +114,7 @@ prefix_ void satcom::lib::Scheduler::add(int fd, Callback const & cb, EventId ev
         throw SystemException(errno);
 }
 
-prefix_ void satcom::lib::Scheduler::remove(int fd, EventId eventMask)
+prefix_ void satcom::lib::Scheduler::do_remove(int fd, EventId eventMask)
 {
     FdTable::iterator i (fdTable_.find(fd));
     if (i == fdTable_.end()) 
@@ -171,24 +171,24 @@ prefix_ void satcom::lib::Scheduler::process()
 
         if (ev.events & EPOLLIN) {
             BOOST_ASSERT(spec.cb_read); 
-            spec.cb_read(ev.data.fd, EV_READ);
+            spec.cb_read(EV_READ);
         }
         else if (ev.events & EPOLLPRI) {
             BOOST_ASSERT(spec.cb_prio);
-            spec.cb_prio (ev.data.fd, EV_PRIO);
+            spec.cb_prio(EV_PRIO);
         }
         else if (ev.events & EPOLLOUT) {
             BOOST_ASSERT(spec.cb_write);
-            spec.cb_write(ev.data.fd, EV_WRITE);
+            spec.cb_write(EV_WRITE);
         }
 
         else if (ev.events & EPOLLHUP) {
             BOOST_ASSERT(spec.cb_hup);
-            spec.cb_hup(ev.data.fd, EV_HUP);
+            spec.cb_hup(EV_HUP);
         }
         else if (ev.events & EPOLLERR) {
             BOOST_ASSERT(spec.cb_err);
-            spec.cb_err(ev.data.fd, EV_ERR);
+            spec.cb_err(EV_ERR);
         }
     }
 }
diff --git a/Scheduler/Scheduler.cci b/Scheduler/Scheduler.cci
index f34286e486cea5b9a9bb772c418f6bbc1ed6cbfe..d332654343472922effba8978f74d9c22573f336 100644
--- a/Scheduler/Scheduler.cci
+++ b/Scheduler/Scheduler.cci
@@ -34,6 +34,11 @@ prefix_ void satcom::lib::Scheduler::terminate()
     terminate_ = true;
 }
 
+prefix_ int satcom::lib::retrieve_filehandle(int fd)
+{
+    return fd;
+}
+
 ///////////////////////////////cci.e///////////////////////////////////////
 #undef prefix_
 
diff --git a/Scheduler/Scheduler.cti b/Scheduler/Scheduler.cti
index 7ef1148ba9e51b46c6e2d01690dc0f34d2e29e03..be4196168cbb64208eceb587bb06c5f94c0b365b 100644
--- a/Scheduler/Scheduler.cti
+++ b/Scheduler/Scheduler.cti
@@ -35,14 +35,15 @@ prefix_ void satcom::lib::Scheduler::add(Handle const & handle,
                                          typename GenericCallback<Handle>::Callback const & cb,
                                          EventId eventMask)
 {
-    add(retrieve_filehandle(handle),boost::bind(cb,handle,_2),eventMask);
+    // retrieve_filehandle is found via ADL
+    do_add(retrieve_filehandle(handle),boost::bind(cb,handle,_1),eventMask);
 }
 
 template <class Handle>
 prefix_ void satcom::lib::Scheduler::remove(Handle const & handle, EventId eventMask)
 {
     // retrieve_filehandle is found via ADL
-    remove(retrieve_filehandle(handle),eventMask);
+    do_remove(retrieve_filehandle(handle),eventMask);
 }
 
 ///////////////////////////////cti.e///////////////////////////////////////
diff --git a/Scheduler/Scheduler.hh b/Scheduler/Scheduler.hh
index e731db4b499b06f0d5604174a48dc2f0cdcfda46..8916723181261819df9eb2e84d03feb1003216b3 100644
--- a/Scheduler/Scheduler.hh
+++ b/Scheduler/Scheduler.hh
@@ -59,7 +59,6 @@ namespace lib {
             typedef boost::function<void (typename boost::call_traits<Handle>::param_type,
                                           EventId) > Callback;
         };
-        typedef GenericCallback<int>::Callback Callback;
 
         ///////////////////////////////////////////////////////////////////////////
         ///\name Structors and default members
@@ -76,9 +75,6 @@ namespace lib {
         ///@}
         ///////////////////////////////////////////////////////////////////////////
 
-        void add(int fd, Callback const & cb, EventId eventMask = EV_ALL);
-        void remove(int fd, EventId eventMask = EV_ALL);
-
         template <class Handle>
         void add(Handle const & handle, 
                  typename GenericCallback<Handle>::Callback const & cb,
@@ -94,14 +90,19 @@ namespace lib {
 
     private:
         Scheduler();
-
-        struct EventSpec 
+ 
+	typedef boost::function<void (EventId)> InternalCallback;
+	
+        void do_add(int fd, InternalCallback const & cb, EventId eventMask = EV_ALL);
+        void do_remove(int fd, EventId eventMask = EV_ALL);
+	
+	struct EventSpec 
         {
-            Callback cb_read;
-            Callback cb_prio;
-            Callback cb_write;
-            Callback cb_hup;
-            Callback cb_err;
+            InternalCallback cb_read;
+            InternalCallback cb_prio;
+            InternalCallback cb_write;
+            InternalCallback cb_hup;
+            InternalCallback cb_err;
 
             int epollMask() const;
         };
@@ -113,6 +114,8 @@ namespace lib {
         bool terminate_;
     };
 
+    int retrieve_filehandle(int fd);
+
 }}
 
 ///////////////////////////////hh.e////////////////////////////////////////