diff --git a/load.c b/load.c
index 43eae25654c3de8c3b83f52c027bb51fc2e7b78e..8fd418da0fd86b72b045bdbc1781ad5b6a2ec8d6 100644
--- a/load.c
+++ b/load.c
@@ -43,7 +43,7 @@ void _get_load(uint64_t* results) {
 
 // Public interface
 
-unsigned int init_load(void **state) {
+unsigned int init_load(char* argument, void **state) {
   load_fid = open("/proc/stat", O_RDONLY);
   _get_load(load_values);
   return 10;
diff --git a/load.h b/load.h
index fef0eb64c71bdf89f0c228508d1a3b917e841e4b..363e07ad8adb5606a71f44a7f48fd733e518c68b 100644
--- a/load.h
+++ b/load.h
@@ -18,7 +18,7 @@
 
  *******************************************************/
 
-unsigned int init_load(void **);
+unsigned int init_load(char*, void **);
 unsigned int get_load(uint64_t* results, void*);
 void clean_load(void *);
 void label_load(char **labels);
diff --git a/mojitos.c b/mojitos.c
index a1925ded7f5fca4fb3e0317aea8c58241b07bbc1..924c685cff1c2359a8efc35d7e84ec8d30ac4899 100644
--- a/mojitos.c
+++ b/mojitos.c
@@ -111,7 +111,7 @@ void flushexit() {
   fclose(output);
 }
 
-typedef unsigned int (initializer_t)(void **);
+typedef unsigned int (initializer_t)(char*, void **);
 typedef void (labeler_t)(char **);
 typedef unsigned int (*getter_t)(uint64_t*, void*);
 typedef void (*cleaner_t)(void*);
@@ -125,7 +125,7 @@ unsigned int nb_sensors=0;
 char **labels=NULL;
 uint64_t *values=NULL;
 
-void add_source(initializer_t init, labeler_t labeler,
+void add_source(initializer_t init, char* arg, labeler_t labeler,
 		getter_t get, cleaner_t clean) {
     nb_sources++;
     states = realloc(states, nb_sources*sizeof(void*));
@@ -133,7 +133,7 @@ void add_source(initializer_t init, labeler_t labeler,
     getter[nb_sources-1] = get;
     cleaner = realloc(cleaner, nb_sources*sizeof(void*));
     cleaner[nb_sources-1] = clean;
-    int nb = init(&states[nb_sources-1]);
+    int nb = init(arg, &states[nb_sources-1]);
 
     labels = realloc(labels, (nb_sensors+nb)*sizeof(char*));
     labeler(labels+nb_sensors);
@@ -152,7 +152,6 @@ int main(int argc, char **argv) {
 
   int rapl_mode = -1;
   int perf_mode = -1;
-  int load_mode = -1;
   int stat_mode = -1;
 
   if(argc==1)
@@ -198,7 +197,7 @@ int main(int argc, char **argv) {
       rapl_mode=0;
       break;
     case 'u':
-      load_mode=0;
+      add_source(init_load, NULL, label_load, get_load, clean_load);
       break;
     case 's':
       stat_mode=0;
@@ -210,9 +209,6 @@ int main(int argc, char **argv) {
       usage(argv);
     }
   
-  // Load initialization
-  if(load_mode == 0)
-    add_source(init_load, label_load, get_load, clean_load);
   
   // Network initialization
   int *network_sources = NULL;
@@ -388,8 +384,7 @@ int main(int argc, char **argv) {
   }
   for(int i=0; i<nb_sources;i++)
     cleaner[i](states[i]);
-  //  if(load_mode == 0)
-  //    clean_load(load_state);
+
   if(dev!=NULL)
     clean_network(network_sources);
   if(infi_path!=NULL)