diff --git a/srp_analysis/src/file_handler.rs b/srp_analysis/src/file_handler.rs
new file mode 100644
index 0000000000000000000000000000000000000000..cff1460c0a9aeca303227ab2cab36d6b75d2cfbe
--- /dev/null
+++ b/srp_analysis/src/file_handler.rs
@@ -0,0 +1,34 @@
+use std::fs::File;
+use std::io::prelude::*;
+use std::path::PathBuf;
+use super::common::*;
+
+
+/*
+ * Write `contents` to the file `file`.
+ */
+pub fn write_to_file(contents: String, file: PathBuf) -> std::io::Result<()> {
+    let mut file = File::create(file)?;
+    file.write_all(contents.as_bytes())?;
+    Ok(())
+}
+
+/*
+ * Load the tasks from a json file `file`.
+ */
+pub fn load_tasks(file: PathBuf) -> Tasks {
+    let mut serialized = String::new();
+    read_from_file(&mut serialized, file);
+    return serde_json::from_str(&serialized).unwrap();
+}
+
+
+/*
+ * Read string from file `file` and store it in `contents`.
+ */
+pub fn read_from_file(contents: &mut String, file: PathBuf) -> std::io::Result<()> {
+    let mut file = File::open(file)?;
+    file.read_to_string(contents)?;
+    Ok(())
+}
+
diff --git a/srp_analysis/src/formater.rs b/srp_analysis/src/formater.rs
new file mode 100644
index 0000000000000000000000000000000000000000..7b7fd8abf1530e034a4c95d9a48ee67fca373d2f
--- /dev/null
+++ b/srp_analysis/src/formater.rs
@@ -0,0 +1,105 @@
+use super::common::*;
+use super::srp_analyser::*;
+
+
+/*
+ * Creates a readable representation of the analysis and the given information.
+ */
+pub fn format_analysis(analysis: &Vec<AnalysedTask>, tasks: &Tasks, ip: &IdPrio, tr: &TaskResources) -> String {
+    let overview = format_overview(tasks, ip, tr);
+
+    let mut body = String::new();
+    for at in analysis {
+        body = format!("{}\n{}", body, format_analysed_task(at));
+    }
+
+    body = format!("{}\n", body);
+
+    for t in tasks {
+        body = format!("{}\n{}", body, format_task(t));
+    }
+
+    return format!("{}\n{}", overview, body);
+}
+
+
+/*
+ * Creates the overview section of the readable representation.
+ */
+pub fn format_overview(tasks: &Tasks, ip: &IdPrio, tr: &TaskResources) -> String {
+    // Formats the names of all the tasks.
+    fn format_task_names(tasks: &Tasks) -> String {
+        let mut task_names = "Tasks:".to_string();
+        for t in tasks {
+            task_names = format!("{} {}", task_names, t.id);
+        } 
+        return task_names;
+    }
+
+    // Formats the Id and priority of tasks.
+    fn format_id_prio(ip: &IdPrio) -> String {
+//    let id_prio = format!("Id Priority: {:?}", ip);
+        let mut id_prio = "Priority:".to_string();
+        for (key, value) in ip {
+            id_prio = format!("{}  P({}) = {}", id_prio, key, value);
+        }
+        return id_prio;
+    }
+
+    // Formats the tasks resources.
+    fn format_task_res(tr: &TaskResources) -> String {
+//    let task_res = format!("Task Resources: {:?}", tr);
+        let mut task_res = "Task Resources:".to_string();
+        for (key, value) in tr {
+            
+            let mut values_st = "(".to_string();
+            for v in value {
+                values_st = format!("{} {}", values_st, v);
+            }
+            task_res = format!("{} {}:{} )", task_res, key, values_st);
+        }
+        return task_res;
+    }
+
+    let tot_util = format!("Total Util: {}", total_load_factor(tasks));
+    let task_names = format_task_names(tasks);
+    let id_prio = format_id_prio(ip);
+    let task_res = format_task_res(tr);
+
+    return format!("Overview\n\t{}\n\t{}\n\t{}\n\t{}", tot_util, task_names, id_prio, task_res); 
+}
+ 
+
+/*
+ * Creates a readable representation of a analysed task.
+ */
+pub fn format_analysed_task(task: &AnalysedTask) -> String {
+    let header = format!("Analysis of {}", task.task.id);
+    let res_t = format!("Response Time: {}", task.response_time);
+    let wcet = format!("wcet: {}", task.wcet);
+    let block_t = format!("Block Time: {}", task.block_time);
+    let pre_t = format!("Preemtion Time: {}", task.preemtion_time);
+    return format!("{}\n\t{}\n\t{}\n\t{}\n\t{}", header, res_t, wcet, block_t, pre_t);
+}
+
+
+/*
+ * Creates a readable representation of a task.
+ */
+pub fn format_task(task: &Task) -> String {
+    let id = format!("Task {}", task.id);
+    let prio = format!("Priority: {}", task.prio);
+    let dl = format!("Deadline: {}", task.deadline);
+    let inter_a = format!("Inter Arrival: {}", task.inter_arrival);
+    let trace = format_trace(&task.trace);
+    return format!("{}\n\t{}\n\t{}\n\t{}\n\t{}", id, prio, dl, inter_a, trace);
+}
+
+
+/*
+ * Creates a readable representation of a trace.
+ */
+pub fn format_trace(trace: &Trace) -> String {
+    return format!("{:?}", trace);
+}
+
diff --git a/srp_analysis/src/main.rs b/srp_analysis/src/main.rs
index 1db7eff414b5469c3b6c3dca2aaef01b40a57052..a92198d5ed5ab88c70df3186586d2d55ed5bd534 100644
--- a/srp_analysis/src/main.rs
+++ b/srp_analysis/src/main.rs
@@ -1,15 +1,16 @@
 mod common;
 mod srp_analyser;
+mod formater;
+mod file_handler;
 
 use common::*;
 use srp_analyser::*;
+use formater::*;
+use file_handler::*;
 
 use std::path::PathBuf;
 use structopt::StructOpt;
 
-use std::fs::File;
-use std::io::prelude::*;
-
 
 #[derive(Debug, StructOpt)]
 #[structopt(name = "srp_analysis", about = "Preforms srp analysis.")]
@@ -33,10 +34,9 @@ struct Opt {
 
 
 fn main() {
-
     let opt = Opt::from_args();
     //println!("{:?}", opt);
-    
+
     let tasks: Tasks = match opt.in_file {
         Some(file) => load_tasks(file),
         None => create_tasks(),
@@ -59,117 +59,12 @@ fn main() {
         },
         None => println!("{}", output),
     };
-
-//    match opt.output {
-//        Some(file) => {
-//            write_to_file(serde_json::to_string(&analysis).unwrap(), file);
-//        }, // TODO: Implement so that the analysis can be saved to txt.
-//        None => {
-//            println!("{}", format_analysis(&analysis, &tasks, &ip, &tr)); 
-//        },
-//    };
-}
-
-
-fn format_analysis(analysis: &Vec<AnalysedTask>, tasks: &Tasks, ip: &IdPrio, tr: &TaskResources) -> String {
-    let overview = format_overview(tasks, ip, tr);
-
-    let mut body = String::new();
-    for at in analysis {
-        body = format!("{}\n{}", body, format_analysed_task(at));
-    }
-
-    body = format!("{}\n", body);
-
-    for t in tasks {
-        body = format!("{}\n{}", body, format_task(t));
-    }
-
-    return format!("{}\n{}", overview, body);
-}
-
-
-fn format_overview(tasks: &Tasks, ip: &IdPrio, tr: &TaskResources) -> String {
-    fn format_task_names(tasks: &Tasks) -> String {
-        let mut task_names = "Tasks:".to_string();
-        for t in tasks {
-            task_names = format!("{} {}", task_names, t.id);
-        } 
-        return task_names;
-    }
-    fn format_id_prio(ip: &IdPrio) -> String {
-//    let id_prio = format!("Id Priority: {:?}", ip);
-        let mut id_prio = "Priority:".to_string();
-        for (key, value) in ip {
-            id_prio = format!("{}  P({}) = {}", id_prio, key, value);
-        }
-        return id_prio;
-    }
-    fn format_task_res(tr: &TaskResources) -> String {
-//    let task_res = format!("Task Resources: {:?}", tr);
-        let mut task_res = "Task Resources:".to_string();
-        for (key, value) in tr {
-            
-            let mut values_st = "(".to_string();
-            for v in value {
-                values_st = format!("{} {}", values_st, v);
-            }
-            task_res = format!("{} {}:{} )", task_res, key, values_st);
-        }
-        return task_res;
-    }
-    let tot_util = format!("Total Util: {}", total_load_factor(tasks));
-    let task_names = format_task_names(tasks);
-    let id_prio = format_id_prio(ip);
-    let task_res = format_task_res(tr);
-
-    return format!("Overview\n\t{}\n\t{}\n\t{}\n\t{}", tot_util, task_names, id_prio, task_res); 
-}
- 
-
-fn format_analysed_task(task: &AnalysedTask) -> String {
-    let header = format!("Analysis of {}", task.task.id);
-    let res_t = format!("Response Time: {}", task.response_time);
-    let wcet = format!("wcet: {}", task.wcet);
-    let block_t = format!("Block Time: {}", task.block_time);
-    let pre_t = format!("Preemtion Time: {}", task.preemtion_time);
-    return format!("{}\n\t{}\n\t{}\n\t{}\n\t{}", header, res_t, wcet, block_t, pre_t);
-}
-
-fn format_task(task: &Task) -> String {
-    let id = format!("Task {}", task.id);
-    let prio = format!("Priority: {}", task.prio);
-    let dl = format!("Deadline: {}", task.deadline);
-    let inter_a = format!("Inter Arrival: {}", task.inter_arrival);
-    let trace = format_trace(&task.trace);
-    return format!("{}\n\t{}\n\t{}\n\t{}\n\t{}", id, prio, dl, inter_a, trace);
-}
-
-fn format_trace(trace: &Trace) -> String {
-    return format!("{:?}", trace);
-}
-
-
-
-fn write_to_file(contents: String, file: PathBuf) -> std::io::Result<()> {
-    let mut file = File::create(file)?;
-    file.write_all(contents.as_bytes())?;
-    Ok(())
-}
-
-fn load_tasks(file: PathBuf) -> Tasks {
-    let mut serialized = String::new();
-    read_from_file(&mut serialized, file);
-    return serde_json::from_str(&serialized).unwrap();
-}
-
-fn read_from_file(contents: &mut String, filename: PathBuf) -> std::io::Result<()> {
-    let mut file = File::open(filename)?;
-    file.read_to_string(contents)?;
-    Ok(())
 }
 
 
+/*
+ * Creates example tasks.
+ */
 fn create_tasks() -> Tasks { let t1 = Task {
         id: "T1".to_string(),
         prio: 1,
diff --git a/srp_analysis/src/srp_analyser.rs b/srp_analysis/src/srp_analyser.rs
index 8047622117c80fa672d08fc114b9bb1eba9ba6fa..dad43930ba31699d658abda9ea1b3bfa37df4eee 100644
--- a/srp_analysis/src/srp_analyser.rs
+++ b/srp_analysis/src/srp_analyser.rs
@@ -195,4 +195,3 @@ pub fn analyse(tasks: &Tasks, ip: &IdPrio, tr: &TaskResources, approx: bool) ->
     return analysis;
 }
 
-