Index: include/libroar/roardl.h
===================================================================
--- include/libroar/roardl.h	(revision 5344)
+++ include/libroar/roardl.h	(revision 5347)
@@ -67,4 +67,5 @@
 #define ROAR_DL_LIBNAME_VERSION         0
 #define ROAR_DL_LIBINST_VERSION         1
+#define ROAR_DL_LIBDEP_VERSION          0
 
 #define ROAR_DL_PLUGIN(lib) struct roar_dl_libraryinst *                                          \
@@ -110,4 +111,7 @@
                                                  lib.global_data_init = &(init);       \
                                                  lib.global_data_pointer = (void*)&(ptr)
+#define ROAR_DL_PLUGIN_REG_LIBDEP(deps) (((lib.libdep = deps) == NULL) ? \
+                                           (ssize_t)-1 : \
+                                           (ssize_t)(lib.libdep_len = sizeof(deps)/sizeof(struct roar_dl_librarydep)))
 
 // meta data stuff:
@@ -199,4 +203,12 @@
 };
 
+#define ROAR_DL_DEP(__flags,__name,__libname,__abiversion) \
+                                                   {.version    = ROAR_DL_LIBDEP_VERSION,            \
+                                                    .len        = sizeof(struct roar_dl_librarydep), \
+                                                    .flags      = __flags,                           \
+                                                    .name       = __name,                            \
+                                                    .libname    = __libname,                         \
+                                                    .abiversion = __abiversion}
+
 struct roar_dl_libraryinst {
  int      version;
Index: libroar/roardl.c
===================================================================
--- libroar/roardl.c	(revision 5344)
+++ libroar/roardl.c	(revision 5347)
@@ -391,4 +391,15 @@
   return -1;
 
+ if ( (lib->libdep == NULL && lib->libdep_len) || (lib->libdep != NULL && !lib->libdep_len) ) {
+  roar_err_set(ROAR_ERROR_BADLIB);
+  return -1;
+ }
+
+ if ( lib->libdep != NULL && lib->libdep_len ) {
+  // dynamic loader infos are currently not supported.
+  roar_err_set(ROAR_ERROR_NOTSUP);
+  return -1;
+ }
+
  if ( !((void*)lhandle < (void*)128) ) {
   lhandle->lib = lib;
Index: roarclients/roarpluginrunner.c
===================================================================
--- roarclients/roarpluginrunner.c	(revision 5346)
+++ roarclients/roarpluginrunner.c	(revision 5347)
@@ -94,7 +94,9 @@
  struct roar_dl_libraryinst * (*func)(struct roar_dl_librarypara * para);
  struct roar_dl_libraryinst * lib;
- int libok = 0, libnameok = 0;
+ int libok = 0, libnameok = 0, libdepok = 0;
  int tmp;
  int i;
+ size_t iter;
+ char c;
 
  if ( lhandle == NULL )
@@ -154,7 +156,7 @@
                                                       lib->libname->len == sizeof(*(lib->libname)) ? "" : "no ");
    if ( libnameok ) {
-#define _ps(c,name) \
+#define _ps(k,name) \
     tmp = (lib->libname->name) != NULL; \
-    printf("|   %c-> %-15s = %s%s%s\n", (c), #name, tmp ? "\"" : "", \
+    printf("|   %c-> %-15s = %s%s%s\n", (k), #name, tmp ? "\"" : "", \
                                     tmp ? (lib->libname->name) : "<not set>", tmp ? "\"" : "");
 
@@ -173,6 +175,38 @@
   printf("|-> global_data_init    = %s\n", _ptrrange2str(lib->global_data_init, lib->global_data_len));
   printf("|-> global_data_pointer = %s\n", _ptr2str(lib->global_data_pointer));
-  printf("|-> libdep              = %s\n", _ptr2str(lib->libdep));
-  printf("|-> libdep_len          = %zu\n", lib->libdep_len);
+  if ( lib->libdep != NULL && lib->libdep_len ) {
+   printf("|-> libdep              = %s\n", _ptr2str(lib->libdep));
+   for (iter = 0; iter < lib->libdep_len; iter++) {
+    printf("|   %c-> Table entry %zu   = %p\n", iter == (lib->libdep_len-1) ? '\\' : '|', iter, &(lib->libdep[iter]));
+    c = iter == (lib->libdep_len-1) ? ' ' : '|';
+    if ( lib->libdep[iter].version == ROAR_DL_LIBDEP_VERSION &&
+         lib->libdep[iter].len     == sizeof(struct roar_dl_librarydep) ) {
+     libdepok = 1;
+    } else {
+     libdepok = 0;
+    }
+    printf("|   %c   |-> version     = %i (%smatch)\n", c, lib->libdep[iter].version,
+                                                        lib->libdep[iter].version == ROAR_DL_LIBDEP_VERSION ? "" : "no ");
+    printf("|   %c   %c-> len         = %zu (%smatch)\n", c, libdepok ? '|' : '\\',
+                                                       lib->libdep[iter].len,
+                                                       lib->libdep[iter].len == sizeof(struct roar_dl_librarydep) ?
+                                                       "" : "no ");
+    if ( libdepok ) {
+     printf("|   %c   |-> flags       = 0x%.8lX\n", c, (unsigned long int)lib->libdep[iter].flags);
+#define _ps(k,name) \
+    tmp = (lib->libdep[iter].name) != NULL; \
+    printf("|   %c   %c-> %-11s = %s%s%s\n", c, (k), #name, tmp ? "\"" : "", \
+                                    tmp ? (lib->libdep[iter].name) : "<not set>", tmp ? "\"" : "");
+     _ps('|', name);
+     _ps('|', libname);
+     _ps('\\', abiversion);
+#undef _ps
+    }
+   }
+   printf("|-> libdep_len          = %zu\n", lib->libdep_len);
+  } else if ( (lib->libdep == NULL && lib->libdep_len) || (lib->libdep != NULL && !lib->libdep_len) ) {
+   printf("|-> libdep              = %s (invalid)\n", _ptr2str(lib->libdep));
+   printf("|-> libdep_len          = %zu (invalid)\n", lib->libdep_len);
+  }
   printf("\\-> appsched            = %s\n", _ptr2str(lib->appsched));
   if ( lib->appsched != NULL ) {
