diff --git a/include/iri_base_algorithm/iri_base_algorithm.h b/include/iri_base_algorithm/iri_base_algorithm.h
index 2953659db54587fd77159771a9fe420ac0cd0ccb..b9f8be2541ce438ac164dada68eac3364df5198a 100644
--- a/include/iri_base_algorithm/iri_base_algorithm.h
+++ b/include/iri_base_algorithm/iri_base_algorithm.h
@@ -152,6 +152,8 @@ class IriBaseAlgorithm
     */
     int spin(void);
 
+    int nodelet_spin(void);
+
   private:
    /**
     * \brief ros spin thread
@@ -380,6 +382,35 @@ int IriBaseAlgorithm<Algorithm>::spin(void)
   return 0;
 }
 
+template <class Algorithm>
+int IriBaseAlgorithm<Algorithm>::nodelet_spin(void)
+{
+  ROS_DEBUG("IriBaseAlgorithm::spin");
+
+  // initialize diagnostics
+  this->diagnostic_.setHardwareID("none");
+  this->addDiagnostics();
+  
+  // assign callback to dynamic reconfigure server
+  this->dsrv_.setCallback(boost::bind(&IriBaseAlgorithm<Algorithm>::reconfigureCallback, this, _1, _2));
+
+  // create the status thread
+  pthread_create(&this->thread,NULL,this->mainThread,this);
+
+  while(ros::ok())
+  {
+    // update diagnostics
+    this->diagnostic_.update();
+    
+    ros::WallDuration(this->diagnostic_.getPeriod()).sleep();
+  }
+
+  // stop ros
+  ros::shutdown();
+
+  return 0;
+}
+
 // definition of the static Ctrl+C counter
 
 /**