diff --git a/lib/exampletask/GwExampleTask.cpp b/lib/exampletask/GwExampleTask.cpp
index 59e3959..3dd698a 100644
--- a/lib/exampletask/GwExampleTask.cpp
+++ b/lib/exampletask/GwExampleTask.cpp
@@ -20,13 +20,38 @@ class ExampleNotWorkingIf: public GwApi::TaskInterfaces::Base{
     public:
     int someValue=99;
 };
-DECLARE_TASKIF(exampleTask,ExampleNotWorkingIf);
-
+DECLARE_TASKIF(ExampleNotWorkingIf);
+void exampleTask(GwApi *param);
 /**
  * an init function that ist being called before other initializations from the core
  */
 void exampleInit(GwApi *api){
     api->getLogger()->logDebug(GwLog::LOG,"example init running");
+    // make the task known to the core
+    // the task function should not return (unless you delete the task - see example code)
+    const String taskName("exampleTask");
+    api->addUserTask(exampleTask, taskName, 4000);
+    // this would create our task with a stack size of 4000 bytes
+
+    // we declare some capabilities that we can
+    // use in config.json to only show some
+    // elements when this capability is set correctly
+    api->addCapability("testboard", "true");
+    api->addCapability("testboard2", "true");
+    // hide some config value
+    // just set HIDE + the name of the config item to true
+    api->addCapability("HIDEminXdrInterval", "true");
+    // example for a user defined help url that will be shown when clicking the help button
+    api->addCapability("HELP_URL", "https://www.wellenvogel.de");
+
+    //we would like to store data with the interfaces that we defined
+    //the name must match the one we used for addUserTask
+    api->taskInterfaces()->claim<ExampleTaskIf>(taskName);
+    //not working interface
+    if (!api->taskInterfaces()->claim<ExampleNotWorkingIf>(taskName)){
+        api->getLogger()->logDebug(GwLog::ERROR,"unable to claim ExampleNotWorkingIf");
+    }
+
     //this example is a more or less useless example how you could set some
     //config value to a fixed value
     //you can only set config values within the init function
@@ -142,10 +167,10 @@ void exampleTask(GwApi *api){
     GwApi::Status status;
     int counter=api->addCounter("usertest");
     int apiResult=0;
-    ExampleTaskIf e1=apiGetExampleTaskIf(api,apiResult);
+    ExampleTaskIf e1=api->taskInterfaces()->get<ExampleTaskIf>(apiResult);
     LOG_DEBUG(GwLog::LOG,"exampleIf before rs=%d,v=%d,s=%s",apiResult,e1.count,e1.someValue.c_str());
     ExampleNotWorkingIf nw1;
-    bool nwrs=apiSetExampleNotWorkingIf(api,nw1);
+    bool nwrs=api->taskInterfaces()->set(nw1);
     LOG_DEBUG(GwLog::LOG,"exampleNotWorking update returned %d",(int)nwrs);
     String voltageTransducer=api->getConfig()->getString(GwConfigDefinitions::exTransducer);
     int voltageInstance=api->getConfig()->getInt(GwConfigDefinitions::exInstanceId);
@@ -248,13 +273,13 @@ void exampleTask(GwApi *api){
             status.n2kTx); 
         //increment some counter
         api->increment(counter,"Test");       
-        ExampleTaskIf e2=apiGetExampleTaskIf(api,apiResult);
+        ExampleTaskIf e2=api->taskInterfaces()->get<ExampleTaskIf>(apiResult);
         LOG_DEBUG(GwLog::LOG,"exampleIf before update rs=%d,v=%d,s=%s",apiResult,e2.count,e2.someValue.c_str());
         e1.count+=1;
         e1.someValue="running";
-        bool rs=apiSetExampleTaskIf(api,e1);
+        bool rs=api->taskInterfaces()->set(e1);
         LOG_DEBUG(GwLog::LOG,"exampleIf update rs=%d,v=%d,s=%s",(int)rs,e1.count,e1.someValue.c_str());
-        ExampleTaskIf e3=apiGetExampleTaskIf(api,apiResult);
+        ExampleTaskIf e3=api->taskInterfaces()->get<ExampleTaskIf>(apiResult);
         LOG_DEBUG(GwLog::LOG,"exampleIf after update rs=%d,v=%d,s=%s",apiResult,e3.count,e3.someValue.c_str());
         if (!voltageTransducer.isEmpty()){
             //simulate some voltage measurements...
diff --git a/lib/exampletask/GwExampleTask.h b/lib/exampletask/GwExampleTask.h
index f7761b2..eb4e3f3 100644
--- a/lib/exampletask/GwExampleTask.h
+++ b/lib/exampletask/GwExampleTask.h
@@ -8,29 +8,12 @@
 //RS485 on groove
 #define SERIAL_GROOVE_485
 
-void exampleTask(GwApi *param);
 void exampleInit(GwApi *param);
-//make the task known to the core
-//the task function should not return (unless you delete the task - see example code)
-//DECLARE_USERTASK(exampleTask)
-//if your task is not happy with the default 2000 bytes of stack, replace the DECLARE_USERTASK
-DECLARE_USERTASK_PARAM(exampleTask,4000);
-//this would create our task with a stack size of 4000 bytes
-
 
 //let the core call an init function before the 
 //N2K Stuff and the communication is set up
 //normally you should not need this at all
 //this function must return when done - otherwise the core will not start up
 DECLARE_INITFUNCTION(exampleInit);
-//we declare a capability that we can
-//use in config.json to only show some
-//elements when this capability is set correctly
-DECLARE_CAPABILITY(testboard,true);
-DECLARE_CAPABILITY(testboard2,true);
-//hide some config value
-//just set HIDE + the name of the config item to true
-DECLARE_CAPABILITY(HIDEminXdrInterval,true);
-//example for a user defined help url that will be shown when clicking the help button
-DECLARE_STRING_CAPABILITY(HELP_URL,"https://www.wellenvogel.de");
+
 #endif
\ No newline at end of file