diff --git a/load.c b/load.c
index 7a90f3ca68fa4017839d0e36a7cf371979b0fdce..06b984953980721023c4431089c3b23e264256b0 100644
--- a/load.c
+++ b/load.c
@@ -17,16 +17,21 @@
     along with MojitO/S.  If not, see <https://www.gnu.org/licenses/>.
 
  *******************************************************/
-#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
 #include <stdlib.h>
 
 #define LOAD_BUFFER_SIZE 1024
 char buffer[LOAD_BUFFER_SIZE];
 
+static int load_fid=-1;
+
+void init_load() {
+  load_fid = open("/proc/stat", O_RDONLY);
+}
+
 void get_load(long long* results) {
-  FILE* f = fopen("/proc/stat", "rb");
-  fgets(buffer, LOAD_BUFFER_SIZE, f);
-  fclose(f);
+  pread(load_fid, buffer, LOAD_BUFFER_SIZE-1, 0);
   int pos=0;
   while(buffer[pos] > '9' || buffer[pos] < '0') pos++;
   for(int i=0; i<10; i++) {
@@ -35,3 +40,8 @@ void get_load(long long* results) {
     pos++;
   }
 }
+
+void clean_load() {
+  close(load_fid);
+}
+
diff --git a/load.h b/load.h
index 649f47573604cb202b403dd475222021bd90e5f4..1d344cfff91290610429dd43d4f02920eb876fda 100644
--- a/load.h
+++ b/load.h
@@ -18,4 +18,6 @@
 
  *******************************************************/
 
+void init_load();
 void get_load(long long* results);
+void clean_load();
diff --git a/mojitos.c b/mojitos.c
index dd8900c10d44729ba286c2824d7f50668104dec2..9d179a5bea04d123f97b1374cadf68e24cb1e09f 100644
--- a/mojitos.c
+++ b/mojitos.c
@@ -207,8 +207,10 @@ int main(int argc, char **argv) {
   // Load initialization
   long long load_values[10]={0,0,0,0,0,0,0,0,0,0};
   long long tmp_load_values[10]={0,0,0,0,0,0,0,0,0,0};
-  if(load_mode == 0)
+  if(load_mode == 0) {
+    init_load();
     get_load(load_values);
+  }
   
   // RAPL initialization
   _rapl_t* rapl=NULL;
@@ -353,6 +355,8 @@ int main(int argc, char **argv) {
     free(rapl_values);
     free(tmp_rapl_values);
   }
+  if(load_mode == 0)
+    clean_load();
   if(dev!=NULL)
     clean_network(network_sources);
   if(infi_path!=NULL)