diff --git a/src/parser.c b/src/parser.c
index 92a4498c9439c9998a8893e56e0098a8e896925a..a7116d8cfc9cccbaf654943da4f112ee4924b1f7 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -37,7 +37,8 @@ static int count_char(const char *str, char val);
 static int is_empty(const char *str);
 static int count_indentation(const char *str);
 static void parse_line(char *line, struct swift_params *params);
-static void parse_param(char *line, struct swift_params *params);
+static void parse_value(char *line, struct swift_params *params);
+static void parse_section_param(char *line, int *isFirstParam, char *sectionName, struct swift_params *params);
 
 /**
  * @brief Reads an input file and stores each parameter in a structure.
@@ -162,7 +163,7 @@ static void parse_line(char *line, struct swift_params *params) {
       
       /* Check if the line contains a value and parse it. */
       if (strchr(trim_line, PARSER_VALUE_CHAR)) {
-        parse_param(trim_line, params);
+        parse_value(trim_line, params);
       }
       /* Check for invalid lines,not including the start and end of file. */
       /* Note: strcmp returns 0 if both strings are the same.*/
@@ -182,77 +183,96 @@ static void parse_line(char *line, struct swift_params *params) {
  *
  */
 
-static void parse_param(char *line, struct swift_params *params) {
-  static int in_section = 0;
+static void parse_value(char *line, struct swift_params *params) {
+  static int inSection = 0;
   static char
       section[PARSER_MAX_LINE_SIZE]; /* Keeps track of current section name. */
-  static int is_first_param = 1;
-  static int section_indent = 0;
-  char tmp_str[PARSER_MAX_LINE_SIZE];
-  char param_name[PARSER_MAX_LINE_SIZE];
+  static int isFirstParam = 1;
+  char tmpStr[PARSER_MAX_LINE_SIZE];
+
   char *token;
 
-  /* Check for more than one parameter on the same line. */
+  /* Check for more than one value on the same line. */
   if (count_char(line, PARSER_VALUE_CHAR) > 1) {
-    error("Found more than one parameter in '%s', only one allowed.", line);
+    error("Found more than one value in '%s', only one allowed.", line);
   }
 
-  if(!in_section && *line == ' ') {
+  /* Check that standalone parameters have correct indentation. */
+  if(!inSection && *line == ' ') {
     error("Invalid line: '%s', standalone parameter defined with incorrect indentation.",line);
   }
 
   /* Check that it is a parameter inside a section.*/
   if (*line == ' ' || *line == '\t') {
-   
-    /* Count indentation of each parameter and check that it 
-     * is consistent with the first parameter in the section. */ 
-    if(is_first_param) {
-      section_indent = count_indentation(line);
-      is_first_param = 0;
-    }
-    else if(count_indentation(line) != section_indent) {
-      error("Invalid line: '%s', parameter has incorrect indentation.",line);
-    }
-    
-    /* Take first token as the parameter name and trim leading white space. */
-    token = strtok(line, " :\t");
-    strcpy(tmp_str, token);
-
-    /* Take second token as the parameter value. */
-    token = strtok(NULL, " #\n");
-
-    /* Prefix the parameter name with its section name and
-     * copy it into the parameter structure. */
-    strcpy(param_name, section);
-    strcat(param_name, tmp_str);
-    strcpy(params->data[params->count].name, param_name);
-    strcpy(params->data[params->count++].value, token);
-
-  } else { /*Else it is the start of a new section or standalone parameter. */
+    parse_section_param(line,&isFirstParam,section,params);
+  } 
+  else { /*Else it is the start of a new section or standalone parameter. */
     /* Take first token as the parameter name. */
     token = strtok(line, " :\t");
-    strcpy(tmp_str, token);
+    strcpy(tmpStr, token);
 
     /* Take second token as the parameter value. */
     token = strtok(NULL, " #\n");
 
     /* If second token is NULL then the line must be a section heading. */
     if (token == NULL) {
-      strcat(tmp_str, PARSER_VALUE_STRING);
-      strcpy(section, tmp_str);
-      in_section = 1;
-      is_first_param = 1;
+      strcat(tmpStr, PARSER_VALUE_STRING);
+      strcpy(section, tmpStr);
+      inSection = 1;
+      isFirstParam = 1;
     } else {
       /* Must be a standalone parameter so no need to prefix name with a
        * section. */
-      strcpy(params->data[params->count].name, tmp_str);
+      strcpy(params->data[params->count].name, tmpStr);
       strcpy(params->data[params->count++].value, token);
-      in_section = 0;
-      is_first_param = 1;
+      inSection = 0;
+      isFirstParam = 1;
     }
   }
 }
 
+/**
+ * @brief Parses a parameter that appears in a section and stores it in a structure.
+ *
+ * @param line Line containing the parameter
+ * @param isFirstParam Shows if the first parameter of a section has been found
+ * @param sectionName String containing the current section name
+ * @param params Structure to be written to
+ *
+ */
+
+static void parse_section_param(char *line, int *isFirstParam, char *sectionName, struct swift_params *params) {
+
+  static int sectionIndent = 0;
+  char tmpStr[PARSER_MAX_LINE_SIZE];
+  char paramName[PARSER_MAX_LINE_SIZE];
+  char *token;
+  
+  /* Count indentation of each parameter and check that it 
+   * is consistent with the first parameter in the section. */ 
+  if(*isFirstParam) {
+    sectionIndent = count_indentation(line);
+    *isFirstParam = 0;
+  }
+  else if(count_indentation(line) != sectionIndent) {
+    error("Invalid line: '%s', parameter has incorrect indentation.",line);
+  }
+  
+  /* Take first token as the parameter name and trim leading white space. */
+  token = strtok(line, " :\t");
+  strcpy(tmpStr, token);
+
+  /* Take second token as the parameter value. */
+  token = strtok(NULL, " #\n");
+
+  /* Prefix the parameter name with its section name and
+   * copy it into the parameter structure. */
+  strcpy(paramName, sectionName);
+  strcat(paramName, tmpStr);
+  strcpy(params->data[params->count].name, paramName);
+  strcpy(params->data[params->count++].value, token);
+}
+
 /**
  * @brief Retrieve integer parameter from structure.
  *