diff --git a/miosix/kernel/intrusive.h b/miosix/kernel/intrusive.h
index 36fa7c376d80eb9af753943d60abe0db67092bec..18c2656069556b0e8c914c0d9bfe61c9f78b25b8 100644
--- a/miosix/kernel/intrusive.h
+++ b/miosix/kernel/intrusive.h
@@ -669,10 +669,20 @@ public:
         T *cur;
     public:
         iterator(T *cur) : cur(cur) {}
-        iterator operator++() { cur = static_cast<T*>(cur->next); }
-        iterator operator--() { cur = static_cast<T*>(cur->prev); }
-        iterator operator++(int) { cur = static_cast<T*>(cur->next); }
-        iterator operator--(int) { cur = static_cast<T*>(cur->prev); }
+        iterator operator++() { cur = static_cast<T*>(cur->next); return *this; }
+        iterator operator--() { cur = static_cast<T*>(cur->prev); return *this; }
+        iterator operator++(int)
+        {
+            iterator result=*this;
+            cur = static_cast<T*>(cur->next);
+            return result;
+        }
+        iterator operator--(int)
+        {
+            iterator result=*this;
+            cur = static_cast<T*>(cur->prev);
+            return result;
+        }
         T* operator*() { return cur; }
         bool operator==(const iterator& rhs) { return cur==rhs.cur; }
         bool operator!=(const iterator& rhs) { return cur!=rhs.cur; }