diff --git a/common/utils/telnetsrv/telnetsrv.c b/common/utils/telnetsrv/telnetsrv.c
index 89e0003bef201d1021d73a5c370a72fd126257b9..a91e7b2398d8376a6709d6f4da663fcc2dedbc8d 100644
--- a/common/utils/telnetsrv/telnetsrv.c
+++ b/common/utils/telnetsrv/telnetsrv.c
@@ -821,14 +821,14 @@ void poll_telnetcmdq(void *qid, void *arg) {
  *
  *
 */
-void exec_moduleinit(char *modname) {
+static bool exec_moduleinit(char *modname) {
   void (*fptr)(void);
   char initfunc[TELNET_CMD_MAXSIZE+10];
 
   if (strlen(modname) > TELNET_CMD_MAXSIZE) {
     fprintf(stderr,"[TELNETSRV] module %s not loaded, name exceeds the %i size limit\n",
             modname, TELNET_CMD_MAXSIZE);
-    return;
+    return false;
   }
 
   sprintf(initfunc,"add_%s_cmds",modname);
@@ -836,37 +836,35 @@ void exec_moduleinit(char *modname) {
 
   if ( fptr != NULL) {
     fptr();
-  } else {
-    fprintf(stderr,"[TELNETSRV] couldn't find %s for module %s \n",initfunc,modname);
+    return true;
   }
+  fprintf(stderr, "[TELNETSRV] couldn't find %s for module %s \n", initfunc, modname);
+  return false;
 }
 
 int add_embeddedmodules(void) {
   int ret=0;
   int pindex = config_paramidx_fromname(telnetoptions,sizeof(telnetoptions)/sizeof(paramdef_t), TELNETSRV_OPTNAME_STATICMOD); 
   for(int i=0; i<telnetoptions[pindex].numelt; i++) {
-    ret++;
-    exec_moduleinit(telnetoptions[pindex].strlistptr[i]);
+    bool success = exec_moduleinit(telnetoptions[pindex].strlistptr[i]);
+    if (success)
+      ret++;
   }
 
   return ret;
 }
 
 int add_sharedmodules(void) {
-  char initfunc[TELNET_CMD_MAXSIZE+9];
-  void (*fptr)(void);
   int ret=0;
   int pindex = config_paramidx_fromname(telnetoptions,sizeof(telnetoptions)/sizeof(paramdef_t), TELNETSRV_OPTNAME_SHRMOD); 
   for(int i=0; i<telnetoptions[pindex].numelt; i++) {
-    sprintf(initfunc,"add_%s_cmds",telnetoptions[pindex].strlistptr[i]);
-    fptr = dlsym(RTLD_DEFAULT,initfunc);
-
-    if ( fptr != NULL) {
-      fptr();
+    char *name = telnetoptions[pindex].strlistptr[i];
+    char libname[256];
+    snprintf(libname, sizeof(libname), "telnetsrv_%s", name);
+    load_module_shlib(libname, NULL, 0, NULL);
+    bool success = exec_moduleinit(name);
+    if (success)
       ret++;
-    } else {
-      fprintf(stderr,"[TELNETSRV] couldn't find %s for module %s \n",initfunc,telnetoptions[pindex].strlistptr[i]);
-    }
   }
 
   return ret;
@@ -890,6 +888,7 @@ int telnetsrv_autoinit(void) {
 
   add_telnetcmd("telnet", telnet_vardef, telnet_cmdarray);
   add_embeddedmodules();
+  add_sharedmodules();
   if ( telnetparams.listenstdin ) {
     if(pthread_create(&telnetparams.telnetclt_pthread,NULL, (void *(*)(void *))run_telnetclt, NULL) != 0) {
       fprintf(stderr,"[TELNETSRV] Error %s on pthread_create f() run_telnetclt \n",strerror(errno));