diff --git a/src/moodle-parser.c b/src/moodle-parser.c
index 07c3c650f0579286c3269508ec1e26c846172285..95d5471dc227662cbfdac5239faf8f23f7bbac21 100644
--- a/src/moodle-parser.c
+++ b/src/moodle-parser.c
@@ -97,7 +97,7 @@ moodle_parse_folder_content (const gchar *html, gsize html_size, const gchar *mo
                                                     "main", strlen("main"),
                                                     NULL);
 
-  if(collection && collection->list && collection->length==1)
+  if(collection->length==1)
     root_node = collection->list[0];
   else
     g_error ("weird result getting the folder container\n");
@@ -108,27 +108,25 @@ moodle_parse_folder_content (const gchar *html, gsize html_size, const gchar *mo
                                                MyHTML_TAG_A,
                                                NULL);
 
-  if (!hrefs || !hrefs->list || !hrefs->length)
+  if (hrefs->length == 0)
     g_error ("weird result getting folder's links\n");
 
-  resources = malloc (hrefs->length*sizeof(struct Resource)); // at most this size will be used.
+  resources = malloc (hrefs->length * sizeof (struct Resource)); // at most this size will be used.
   size_t count=0;
   enum resource_type type;
-  gchar *name=NULL;
-  gchar *href=NULL;
-  gchar *filename=NULL;
+  gchar *name=NULL, *href=NULL, *filename=NULL;
   guint id;
+
   for (size_t i=0; i<hrefs->length; i++) {
     myhtml_tree_node_t *node = hrefs->list[i];
-    myhtml_tree_attr_t *attr = myhtml_node_attribute_first (node);
-    while (attr) {
-      // find the href attribute
+
+    for (myhtml_tree_attr_t *attr = myhtml_node_attribute_first (node); attr; attr = attr->next) {
       if (strcmp (myhtml_attribute_key (attr, NULL), "href") == 0) {
         href = g_strdup (myhtml_attribute_value (attr, NULL)); // found!
         break;
       }
-      attr = myhtml_attribute_next (attr);
     }
+
     if (href) {
       type = read_link (href, &id, &filename);
       if (node->child && node->child->next && node->child->next->child) {
@@ -138,6 +136,7 @@ moodle_parse_folder_content (const gchar *html, gsize html_size, const gchar *mo
       count++;
     }
   }
+  resources = realloc (resources, count * sizeof (struct Resource));
 
   myhtml_collection_destroy (hrefs);
   myhtml_tree_destroy (tree);
@@ -168,120 +167,58 @@ moodle_parse_course_list (const gchar *html, gsize html_size, const gchar *filen
                                                     "coc-courselist", strlen("coc-courselist"),
                                                     NULL);
 
-  if(collection && collection->list && collection->length==1)
+  if (collection->length==1)
     courses_node = collection->list[0];
   else
     g_error ("weird result getting the courses container\n");
   myhtml_collection_destroy (collection);
 
-  /*hrefs = myhtml_get_nodes_by_attribute_value_begin (tree, NULL, courses_node, FALSE,
-                                                     "href", sizeof("href"),
-                                                     EPFL_COURSE_LINK, sizeof(EPFL_COURSE_LINK),
-                                                     NULL);*/
   hrefs = myhtml_get_nodes_by_tag_id_in_scope (tree, NULL,
                                                courses_node,
                                                MyHTML_TAG_A,
                                                NULL);
 
-  if (!hrefs || !hrefs->list || !hrefs->length)
+  if (hrefs->length == 0)
     g_error ("weird result getting courses links\n");
 
-  courses = malloc (hrefs->length*sizeof(struct Course)); // at most this size will be used.
+  courses = malloc (hrefs->length * sizeof (struct Course)); // at most this size will be used.
   size_t count=0;
   size_t size;
   const char *string;
   for (size_t i=0; i<hrefs->length; i++) {
-    myhtml_tree_attr_t* attr = myhtml_node_attribute_first (hrefs->list[i]);
+
     string = NULL;
-    while (attr) {
-      // <a> must have an href
-      if (strcmp (myhtml_attribute_key (attr, NULL), "href") != 0) {
-        attr = myhtml_attribute_next (attr);
-        continue; // not the right attribute
+    for (myhtml_tree_attr_t *attr = myhtml_node_attribute_first (hrefs->list[i]); attr; attr = attr->next) {
+      if (strcmp (myhtml_attribute_key (attr, NULL), "href") == 0) {
+        // we found the href attribute
+        if (g_str_has_prefix (myhtml_attribute_value (attr, NULL), EPFL_COURSE_LINK))
+          string = myhtml_attribute_value (attr, &size); // yay!
+        break;
       }
-      // and href musts start with …/course/view.php?id=
-      if (strncmp (myhtml_attribute_value (attr, NULL), EPFL_COURSE_LINK, strlen (EPFL_COURSE_LINK)) != 0)
-        break; // not an interesting link
-
-      string = myhtml_attribute_value (attr, &size); // yay!
-      attr = myhtml_attribute_next (attr);
     }
+
     if (string && size) {
       // nice link, we add it!
-      //g_print ("url: %s\n", string);
-      courses[count].url = malloc (size+1);
-      strcpy (courses[count].url, string);
-      //courses[count].url[size] = '\0';
+      courses[count].url = g_strndup (string, size);
 
       sscanf(string, EPFL_COURSE_LINK"%u", &(courses[count].id));
 
       string = myhtml_node_text (myhtml_node_child (hrefs->list[i]), &size);
-      //g_print (", %s\n", string);
+
       if (G_UNLIKELY (!string || !size)) {
         g_print ("failed to get course name\n");
         free (courses[count].url);
         continue;
       }
-      courses[count].name = malloc (size+1);
-      strcpy (courses[count].name, string);
+      courses[count].name = g_strndup (string, size);
       count++;
     }
   }
-  courses = realloc (courses, sizeof(struct Course)*count);
+  courses = realloc (courses, sizeof (struct Course) * count);
 
   myhtml_collection_destroy (hrefs);
   myhtml_tree_destroy (tree);
 
-  /*
-  struct Course *cs = malloc(10*(sizeof(struct Course)));
-  cs[0].name = malloc (50*sizeof (char));
-  cs[1].name = malloc (50*sizeof (char));
-  cs[2].name = malloc (50*sizeof (char));
-  cs[3].name = malloc (50*sizeof (char));
-  cs[4].name = malloc (50*sizeof (char));
-  cs[5].name = malloc (50*sizeof (char));
-  cs[6].name = malloc (50*sizeof (char));
-  cs[7].name = malloc (50*sizeof (char));
-  cs[8].name = malloc (50*sizeof (char));
-  cs[9].name = malloc (50*sizeof (char));
-
-  cs[0].url = malloc (50*sizeof (char));
-  cs[1].url = malloc (50*sizeof (char));
-  cs[2].url = malloc (50*sizeof (char));
-  cs[3].url = malloc (50*sizeof (char));
-  cs[4].url = malloc (50*sizeof (char));
-  cs[5].url = malloc (50*sizeof (char));
-  cs[6].url = malloc (50*sizeof (char));
-  cs[7].url = malloc (50*sizeof (char));
-  cs[8].url = malloc (50*sizeof (char));
-  cs[9].url = malloc (50*sizeof (char));
-
-  strcpy(cs[0].name, "Électricité"           );
-  strcpy(cs[1].name, "Analyse"               );
-  strcpy(cs[2].name, "Construction Mécanique");
-  strcpy(cs[3].name, "Design of Experiment"  );
-  strcpy(cs[4].name, "Électrotechnique"      );
-  strcpy(cs[5].name, "Éléments de Machine"   );
-  strcpy(cs[6].name, "Mobilité"              );
-  strcpy(cs[7].name, "Matériaux"             );
-  strcpy(cs[8].name, "Physique"              );
-  strcpy(cs[9].name, "Programmation"         );
-
-  strcpy(cs[0].url, "https://moodle.epfl.ch/course/view.php?id=14019");
-  strcpy(cs[1].url, "https://moodle.epfl.ch/course/view.php?id=14837");
-  strcpy(cs[2].url, "https://moodle.epfl.ch/course/view.php?id=15000");
-  strcpy(cs[3].url, "https://moodle.epfl.ch/course/view.php?id=15829");
-  strcpy(cs[4].url, "https://moodle.epfl.ch/course/view.php?id=15544");
-  strcpy(cs[5].url, "https://moodle.epfl.ch/course/view.php?id=13923");
-  strcpy(cs[6].url, "https://moodle.epfl.ch/course/view.php?id=14412");
-  strcpy(cs[7].url, "https://moodle.epfl.ch/course/view.php?id=15843");
-  strcpy(cs[8].url, "https://moodle.epfl.ch/course/view.php?id=13917");
-  strcpy(cs[9].url, "https://moodle.epfl.ch/course/view.php?id=15698");
-
-  cs[0].id = 14019;
-  cs[1].id = 14837;
-  */
-
   struct Courses courses_struct = {courses, count};
   return courses_struct;
 }
@@ -290,16 +227,15 @@ moodle_parse_course_list (const gchar *html, gsize html_size, const gchar *filen
 static struct Week
 moodle_extract_week (gchar *week_name, myhtml_tree_t *tree, myhtml_tree_node_t *div)
 {
-  myhtml_tree_node_t *element = div->child;
   myhtml_tree_node_t *li;
   guint resource_count = 0;
   struct Resource *resources = NULL;
-  while (element) {
+  for (myhtml_tree_node_t *element = div->child; element; element = element->next) {
     if (element->tag_id == MyHTML_TAG_UL) {
       // files
-      resources = malloc (sizeof (struct Resource)*1000);
-      li = element->child;
-      while (li) {
+      resources = malloc (sizeof (struct Resource) * 1000);
+
+      for (li = element->child; li; li = li->next) {
         gchar *name;
         gchar *textname;
         enum resource_type type;
@@ -311,36 +247,22 @@ moodle_extract_week (gchar *week_name, myhtml_tree_t *tree, myhtml_tree_node_t *
         if (!hrefs || !hrefs->length) {
           // no <a> in this week
           myhtml_collection_destroy (hrefs);
-          li = li->next;
           continue;
         }
 
         myhtml_tree_node_t *node = hrefs->list[0];
-        myhtml_tree_attr_t *attr = myhtml_node_attribute_first (node);
-        const char *string, *href=NULL;
-        size_t size;
         name = textname = NULL;
         id = 0;
-        while (attr) {
-          // <a> must have an href
+        for (myhtml_tree_attr_t *attr = myhtml_node_attribute_first (node); attr; attr = attr->next) {
           if (strcmp (myhtml_attribute_key (attr, NULL), "href") == 0) {
-            href = myhtml_attribute_value (attr, &size);
-
+            const char *href = myhtml_attribute_value (attr, NULL);
             type = read_link (href, &id, NULL);
-
-            string = /*g_path_get_basename (*/href/*)*/;
-            size = strlen (string);
-            name = malloc (size+1);
-            strcpy (name, string);
-
+            name = g_strdup (/*g_path_get_basename (*/href/*)*/);
             if (node->child && node->child->next && node->child->next->child) {
-              string = myhtml_node_text(node->child->next->child, &size);
-              textname = malloc (size+1);
-              strcpy(textname, string);
+              textname = g_strdup (myhtml_node_text(node->child->next->child, NULL));
             }
             break;
           }
-          attr = myhtml_attribute_next (attr);
         }
 
         if (id && textname && name) {
@@ -352,11 +274,9 @@ moodle_extract_week (gchar *week_name, myhtml_tree_t *tree, myhtml_tree_node_t *
         }
 
         myhtml_collection_destroy (hrefs);
-        li = li->next;
       }
-      resources = realloc (resources, sizeof(struct Resource)*resource_count);
+      resources = realloc (resources, sizeof (struct Resource)*resource_count);
     }
-    element = element->next;
   }
 
   struct Week week = {week_name, resource_count, resources};
@@ -385,7 +305,7 @@ moodle_parse_course_content (const gchar *html, gsize html_size, const gchar *fi
                                                   "role", strlen("role"),
                                                   "main", strlen("main"),
                                                   NULL);
-  if(root_col && root_col->list && root_col->length==1)
+  if(root_col->length==1)
     root_node = root_col->list[0];
   else
     g_error ("weird result getting the courses' root element\n");
@@ -397,9 +317,7 @@ moodle_parse_course_content (const gchar *html, gsize html_size, const gchar *fi
                                                          "section-", strlen("section-"),
                                                          NULL);
 
-  if (!weeks_col || !weeks_col->list)
-    g_error ("weird result getting the course's weeks\n");
-  if (!weeks_col->length) {
+  if (weeks_col->length == 0) {
     myhtml_collection_destroy (weeks_col);
     g_warning ("%s seems to have no course section\n", filename);
     struct CourseContent empty = {0, NULL};
@@ -408,87 +326,31 @@ moodle_parse_course_content (const gchar *html, gsize html_size, const gchar *fi
 
   week_count = weeks_col->length;
 
-  weeks = malloc (sizeof (struct Week)*(week_count+1));
+  weeks = malloc (sizeof (struct Week) * (week_count+1));
 
   for (size_t i=0; i<week_count; i++) {
     // each element contain several div. We need to find the right one
     char* week_name = NULL;
-    {
-      myhtml_tree_attr_t* attr = myhtml_node_attribute_first (weeks_col->list[i]);
-      while (attr) {
-        if (strcmp(myhtml_attribute_key (attr, NULL), "aria-label") == 0) {
-          size_t size; const char* string;
-          string = myhtml_attribute_value (attr, &size);
-          week_name = malloc (size+1);
-          strcpy (week_name, string);
-        }
-        attr = attr->next;
-      } // while (attr)}
+    for (myhtml_tree_attr_t* attr = myhtml_node_attribute_first (weeks_col->list[i]); attr; attr = attr->next) {
+      if (strcmp(myhtml_attribute_key (attr, NULL), "aria-label") == 0) {
+        week_name = g_strdup (myhtml_attribute_value (attr, NULL));
+        break;
+      }
     }
-    myhtml_tree_node_t *div = weeks_col->list[i]->child;
-    while (div) {
-      myhtml_tree_attr_t* attr = myhtml_node_attribute_first (div);
-      while (attr) {
+
+    for (myhtml_tree_node_t *div = weeks_col->list[i]->child; div; div = div->next) {
+      for (myhtml_tree_attr_t* attr = myhtml_node_attribute_first (div); attr; attr = attr->next) {
         if (strcmp(myhtml_attribute_key (attr, NULL), "class") == 0
          && strcmp(myhtml_attribute_value (attr, NULL), "content") == 0) {
           // we reached the actual week content !
           weeks[i] = moodle_extract_week (week_name, tree, div);
         }
-        attr = attr->next;
-      } // while (attr)
-      div = div->next;
-    }
-  }
+      } // foreach attr
+    } // foreach div
+  } // foreach week
   myhtml_collection_destroy (weeks_col);
   myhtml_tree_destroy (tree);
 
-/*
-  struct Resource *fs = malloc(6*sizeof(struct DownloadableFile));
-  fs[0].name = malloc (50*sizeof (char));
-  fs[1].name = malloc (50*sizeof (char));
-  fs[2].name = malloc (50*sizeof (char));
-  fs[3].name = malloc (50*sizeof (char));
-  fs[4].name = malloc (50*sizeof (char));
-  fs[5].name = malloc (50*sizeof (char));
-
-  fs[0].url = malloc (50*sizeof (char));
-  fs[1].url = malloc (50*sizeof (char));
-  fs[2].url = malloc (50*sizeof (char));
-  fs[3].url = malloc (50*sizeof (char));
-  fs[4].url = malloc (50*sizeof (char));
-  fs[5].url = malloc (50*sizeof (char));
-
-  strcpy(fs[0].name, "Analyse court complet II");
-  strcpy(fs[1].name, "Série 1"                 );
-  strcpy(fs[2].name, "Série 1 — corrigé"       );
-  strcpy(fs[3].name, "Série 2"                 );
-  strcpy(fs[4].name, "Série 2 — corrigé"       );
-  strcpy(fs[5].name, "Maple file"              );
-
-  strcpy(fs[0].url, "https://moodle.epfl.ch/course/view.php?id=14019");
-  strcpy(fs[1].url, "https://moodle.epfl.ch/course/view.php?id=14837");
-  strcpy(fs[2].url, "https://moodle.epfl.ch/course/view.php?id=15000");
-  strcpy(fs[3].url, "https://moodle.epfl.ch/course/view.php?id=15829");
-  strcpy(fs[4].url, "https://moodle.epfl.ch/course/view.php?id=15544");
-  strcpy(fs[5].url, "https://moodle.epfl.ch/course/view.php?id=13923");
-
-  struct Week ws[] =
-    {{0, 5, &fs[0]},
-     {1, 2, &fs[3]},
-     {2, 1, &fs[5]},
-     {3, 1, &fs[1]},
-     {4, 1, &fs[3]},
-     {5, 1, &fs[5]}};
-  weeks = malloc(6*sizeof(struct Week));
-  weeks[0] = ws[0];
-  weeks[1] = ws[1];
-  weeks[2] = ws[2];
-  weeks[3] = ws[3];
-  weeks[4] = ws[4];
-  weeks[5] = ws[5];
-
-  week_count = 6;
-*/
   struct CourseContent content = {week_count, weeks};
   return content;
 }
diff --git a/src/moodle-provider.c b/src/moodle-provider.c
index a370a5a42df284ef1ae45ae6026bed0f22cb73fd..388413aca9c5233ce041701938052039a51fe8d2 100644
--- a/src/moodle-provider.c
+++ b/src/moodle-provider.c
@@ -228,9 +228,8 @@ moodle_provider_connect (GInputStream **response)
   }
   free (html);*/
 
-  if (strncmp (soup_uri_to_string (soup_message_get_uri (msg), FALSE),
-               EPFL_TEQUILA_LOGIN_ACTION,
-               strlen(EPFL_TEQUILA_LOGIN_ACTION)) == 0) {
+  if (g_str_has_prefix (soup_uri_to_string (soup_message_get_uri (msg), FALSE),
+                        EPFL_TEQUILA_LOGIN_ACTION)) {
     g_warning ("Did not redirect. This is due to an incorrect password, or to a bug.\n");
     return MOODLE_ERROR_AUTH;
   }