Index: include/libroar/roardl.h
===================================================================
--- include/libroar/roardl.h	(revision 5327)
+++ include/libroar/roardl.h	(revision 5335)
@@ -98,6 +98,9 @@
                                    }
 
+// general stuff:
 #define ROAR_DL_PLUGIN_ABORT_LOADING(err) roar_err_set((err)); return NULL
 #define ROAR_DL_PLUGIN_CHECK_VERSIONS(app,abi) if ( roar_dl_para_check_version(para, (app), (abi)) == -1 ) return NULL
+
+// register stuff:
 #define ROAR_DL_PLUGIN_REG(fn, funcptr) (lib.func[(fn)] = (funcptr))
 #define ROAR_DL_PLUGIN_REG_UNLOAD(func) (lib.unload = (func))
@@ -106,4 +109,19 @@
                                                  lib.global_data_init = &(init);       \
                                                  lib.global_data_pointer = (void*)&(ptr)
+
+// meta data stuff:
+#define ROAR_DL_PLUGIN_META_PRODUCT(x)      (libname.libname     = (x))
+#define ROAR_DL_PLUGIN_META_PRODUCT_NV(name,vendor)      ROAR_DL_PLUGIN_META_PRODUCT(name " <" vendor ">")
+#define ROAR_DL_PLUGIN_META_PRODUCT_NIV(name,id,vendor)  ROAR_DL_PLUGIN_META_PRODUCT(name " <" #id "/" vendor ">")
+#define ROAR_DL_PLUGIN_META_VERSION(x)      (libname.libversion  = (x))
+#define ROAR_DL_PLUGIN_META_ABI(x)          (libname.abiversion  = (x))
+#define ROAR_DL_PLUGIN_META_DESC(x)         (libname.description = (x))
+#define ROAR_DL_PLUGIN_META_CONTACT(x)      (libname.contact = (x))
+#define ROAR_DL_PLUGIN_META_CONTACT_FL(first,last)        ROAR_DL_PLUGIN_META_CONTACT(first " " last)
+#define ROAR_DL_PLUGIN_META_CONTACT_FLE(first,last,email) ROAR_DL_PLUGIN_META_CONTACT(first " " last " <" email ">")
+#define ROAR_DL_PLUGIN_META_CONTACT_FLNE(first,last,nick,email) ROAR_DL_PLUGIN_META_CONTACT(first " \"" nick "\" " last " <" email ">")
+#define ROAR_DL_PLUGIN_META_AUTHORS(x)      (libname.authors = (x))
+#define ROAR_DL_PLUGIN_META_LICENSE(x)      (libname.license = (x))
+#define ROAR_DL_PLUGIN_META_LICENSE_TAG(x)  ROAR_DL_PLUGIN_META_LICENSE(ROAR_LICENSE_ ## x)
 
 enum roar_dl_loadercmd {
@@ -116,4 +134,6 @@
  ROAR_DL_LOADER_POSTUNLOAD
 };
+
+struct roar_plugincontainer;
 
 struct roar_dl_librarypara {
@@ -147,5 +167,7 @@
                             // Examples: libroar2, 0.5.1
  struct roar_notify_core * notifycore;
- int (*loader)(struct roar_dl_librarypara * lhandle, enum roar_dl_loadercmd cmd, void * argp);
+ struct roar_plugincontainer * container;
+ int (*loader)(struct roar_dl_librarypara * lhandle, void * loader_userdata, enum roar_dl_loadercmd cmd, void * argp);
+ void * loader_userdata;
 };
 
@@ -169,4 +191,5 @@
  int      version;
  size_t   len;
+ uint32_t flags;
  const char * name;
  const char * libname;
@@ -192,4 +215,6 @@
  int (*free)  (struct roar_dl_librarypara * para);
  int (*update)(struct roar_dl_librarypara * para);
+ int (*tick)  (struct roar_dl_librarypara * para);
+ int (*wait)  (struct roar_dl_librarypara * para);
 };
 
@@ -199,6 +224,10 @@
  ROAR_DL_APPSCHED_FREE,
 #define ROAR_DL_APPSCHED_FREE ROAR_DL_APPSCHED_FREE
- ROAR_DL_APPSCHED_UPDATE
+ ROAR_DL_APPSCHED_UPDATE,
 #define ROAR_DL_APPSCHED_UPDATE ROAR_DL_APPSCHED_UPDATE
+ ROAR_DL_APPSCHED_TICK,
+#define ROAR_DL_APPSCHED_TICK ROAR_DL_APPSCHED_TICK
+ ROAR_DL_APPSCHED_WAIT
+#define ROAR_DL_APPSCHED_WAIT ROAR_DL_APPSCHED_WAIT
 };
 
Index: libroar/roardl.c
===================================================================
--- libroar/roardl.c	(revision 5321)
+++ libroar/roardl.c	(revision 5335)
@@ -538,4 +538,5 @@
 
 int                      roar_dl_appsched_trigger(struct roar_dl_lhandle * lhandle, enum roar_dl_appsched_trigger trigger) {
+ int (*func)  (struct roar_dl_librarypara * para) = NULL;
  int ret;
 
@@ -553,20 +554,29 @@
 #define _trig(lname,uname) \
   case ROAR_DL_APPSCHED_ ## uname :             \
-    if ( lhandle->lib->appsched->lname == NULL ) {   \
-     roar_err_set(ROAR_ERROR_NOENT);            \
-     return -1;                                 \
-    }                                           \
-    roar_dl_context_restore(lhandle);           \
-    ret = lhandle->lib->appsched->lname(lhandle->para); \
-    roar_dl_context_store(lhandle);             \
-    return ret;                                 \
+    func = lhandle->lib->appsched->lname;       \
    break;
   _trig(init, INIT);
   _trig(free, FREE);
   _trig(update, UPDATE);
- }
-
- roar_err_set(ROAR_ERROR_BADRQC);
- return -1;
+  _trig(tick, TICK);
+  _trig(wait, WAIT);
+// use ifndef here so warnings of unhandled enum values will be shown in DEBUG mode.
+#ifndef DEBUG
+  default:
+    roar_err_set(ROAR_ERROR_BADRQC);
+    return -1;
+   break;
+#endif
+ }
+
+ if ( func == NULL ) {
+  roar_err_set(ROAR_ERROR_NOENT);
+  return -1;
+ }
+
+ roar_dl_context_restore(lhandle);
+ ret = func(lhandle->para);
+ roar_dl_context_store(lhandle);
+ return ret;
 }
 
Index: plugins/universal/plugin-info.c
===================================================================
--- plugins/universal/plugin-info.c	(revision 5318)
+++ plugins/universal/plugin-info.c	(revision 5335)
@@ -1,3 +1,3 @@
-//discard.c:
+//plugin-info.c:
 
 /*
@@ -109,11 +109,16 @@
  .init = init,
  .free = NULL,
- .update = NULL
+ .update = NULL,
+ .tick = NULL,
+ .wait = NULL
 };
 
-ROAR_DL_PLUGIN_START(roard_plugin_info) {
-// ROARD_DL_CHECK_VERSIONS();
-
- libname.license = "GPL-3.0"; 
+ROAR_DL_PLUGIN_START(plugin_info) {
+ ROAR_DL_PLUGIN_META_PRODUCT("plugin-info <0/RoarAudio>");
+ ROAR_DL_PLUGIN_META_PRODUCT_NIV("plugin-info", 0, "RoarAudio");
+ ROAR_DL_PLUGIN_META_VERSION(ROAR_VERSION_STRING);
+ ROAR_DL_PLUGIN_META_DESC("Display information about the plugin context");
+ ROAR_DL_PLUGIN_META_CONTACT_FLNE("Philipp", "Schafft", "ph3-der-loewe", "lion@lion.leolix.org");
+ ROAR_DL_PLUGIN_META_LICENSE_TAG(GPLv3_0); 
 
  ROAR_DL_PLUGIN_REG_GLOBAL_DATA(global_data, global_data_init);
