diff --git a/src/configreader_yaml.rs b/src/configreader_yaml.rs
index 75b20abc0d51868398cb68c7a9071d582ff0bcc3..2950185a1da640e671ddcfd69fd27104276103b9 100644
--- a/src/configreader_yaml.rs
+++ b/src/configreader_yaml.rs
@@ -1,7 +1,3 @@
-extern crate linked_hash_map;
-
-use self::linked_hash_map::LinkedHashMap;
-
 use db_objects::{Contest, Taskgroup, Task};
 
 use serde_yaml;
diff --git a/src/db_conn_sqlite.rs b/src/db_conn_sqlite.rs
index f106db5dc7f9905301ea127681207b769a9829bd..a319f1b7dd8f7ef1ca6d216822273c22693f82d4 100644
--- a/src/db_conn_sqlite.rs
+++ b/src/db_conn_sqlite.rs
@@ -5,7 +5,7 @@ use self::rusqlite::Connection;
 use db_conn::{MedalConnection, MedalObject};
 use db_objects::*;
 
-use rand::{thread_rng, Rng};
+use rand::{thread_rng, Rng, distributions::Alphanumeric};
 
 use time;
 
@@ -117,11 +117,11 @@ impl MedalConnection for Connection {
             }) {
             Ok((id, password_hash, salt)) => {
                 //println!("{}, {}", password, password_hash.unwrap());
-                if (hash_password(&password, &salt.unwrap()) == password_hash.unwrap()) {
+                if hash_password(&password, &salt.unwrap()) == password_hash.unwrap() {
                     // Login okay, update session now!
                     
-                    let session_token: String = thread_rng().gen_ascii_chars().take(10).collect();
-                    let csrf_token: String = thread_rng().gen_ascii_chars().take(10).collect();
+                    let session_token: String = thread_rng().sample_iter(&Alphanumeric).take(10).collect();
+                    let csrf_token: String = thread_rng().sample_iter(&Alphanumeric).take(10).collect();
                     let now = time::get_time();
                     
                     self.execute("UPDATE session_user SET session_token = ?1, csrf_token = ?2, last_login = ?3, last_activity = ?3 WHERE id = ?4", &[&session_token, &csrf_token, &now, &id]).unwrap();
@@ -145,8 +145,8 @@ impl MedalConnection for Connection {
             Ok(id) => {
                 // Login okay, update session now!
                     
-                let session_token: String = thread_rng().gen_ascii_chars().take(10).collect();
-                let csrf_token: String = thread_rng().gen_ascii_chars().take(10).collect();
+                let session_token: String = thread_rng().sample_iter(&Alphanumeric).take(10).collect();
+                let csrf_token: String = thread_rng().sample_iter(&Alphanumeric).take(10).collect();
                 let now = time::get_time();
                     
                 self.execute("UPDATE session_user SET session_token = ?1, csrf_token = ?2, last_login = ?3, last_activity = ?3 WHERE id = ?4", &[&session_token, &csrf_token, &now, &id]).unwrap();
@@ -158,8 +158,8 @@ impl MedalConnection for Connection {
     }
     
     fn login_foreign(&self, session: Option<String>, foreign_id: u32, foreign_type: functions::UserType, firstname: String, lastname:String) -> Result<String,()> {
-        let session_token: String = thread_rng().gen_ascii_chars().take(10).collect();
-        let csrf_token: String = thread_rng().gen_ascii_chars().take(10).collect();
+        let session_token: String = thread_rng().sample_iter(&Alphanumeric).take(10).collect();
+        let csrf_token: String = thread_rng().sample_iter(&Alphanumeric).take(10).collect();
         let now = time::get_time();
         
         println!("x {} {}", firstname, lastname);
@@ -192,9 +192,9 @@ impl MedalConnection for Connection {
             Ok(group_id) => {
                 // Login okay, create session_user!
                     
-                let session_token: String = thread_rng().gen_ascii_chars().take(10).collect();
-                let csrf_token: String = thread_rng().gen_ascii_chars().take(10).collect();
-                let login_code: String = Some('u').into_iter().chain(thread_rng().gen_ascii_chars())
+                let session_token: String = thread_rng().sample_iter(&Alphanumeric).take(10).collect();
+                let csrf_token: String = thread_rng().sample_iter(&Alphanumeric).take(10).collect();
+                let login_code: String = Some('u').into_iter().chain(thread_rng().sample_iter(&Alphanumeric))
                     .filter(|x| {let x = *x; !(x == 'l' || x == 'I' || x == '1' || x == 'O' || x == 'o' || x == '0')})
                     .take(9).collect();
                 // todo: check for collisions
@@ -481,9 +481,9 @@ impl MedalConnection for Connection {
 impl MedalObject<Connection> for Task {
     fn save(&mut self, conn: &Connection) {
         conn.query_row("SELECT id FROM task WHERE taskgroup = ?1 AND location = ?2", &[&self.taskgroup, &self.location], |row| {row.get(0)})
-            .and_then(|id| { self.setId(id); Ok(()) });
+            .and_then(|id| { self.set_id(id); Ok(()) }).unwrap(); // TODO handle error;
         
-        let id = match self.getId() {
+        let id = match self.get_id() {
             Some(id) => {
                 conn.execute(
                     "UPDATE task SET taskgroup = ?1, location = ?2, stars = ?3
@@ -499,7 +499,7 @@ impl MedalObject<Connection> for Task {
                 conn.query_row("SELECT last_insert_rowid()", &[], |row| {row.get(0)}).unwrap()
             }
         };
-        self.setId(id);
+        self.set_id(id);
     }
 }
 
@@ -507,9 +507,9 @@ impl MedalObject<Connection> for Task {
 impl MedalObject<Connection> for Taskgroup {
     fn save(&mut self, conn: &Connection) {
         conn.query_row("SELECT id FROM taskgroup WHERE contest = ?1 AND name = ?2", &[&self.contest, &self.name], |row| {row.get(0)})
-            .and_then(|id| { self.setId(id); Ok(()) });
+            .and_then(|id| { self.set_id(id); Ok(()) }).unwrap(); // TODO handle error;
         
-        let id = match self.getId() {
+        let id = match self.get_id() {
             Some(id) => {
                 conn.execute(
                     "UPDATE taskgroup SET contest = ?1, name = ?2
@@ -525,7 +525,7 @@ impl MedalObject<Connection> for Taskgroup {
                 conn.query_row("SELECT last_insert_rowid()", &[], |row| {row.get(0)}).unwrap()
             }
         };
-        self.setId(id);
+        self.set_id(id);
         for mut task in &mut self.tasks {
             task.taskgroup = id;
             task.save(conn);
@@ -536,9 +536,9 @@ impl MedalObject<Connection> for Taskgroup {
 impl MedalObject<Connection> for Contest {
     fn save(&mut self, conn: &Connection) {
         conn.query_row("SELECT id FROM contest WHERE location = ?1 AND filename = ?2", &[&self.location, &self.filename], |row| {row.get(0)})
-            .and_then(|id| { self.setId(id); Ok(()) });
+            .and_then(|id| { self.set_id(id); Ok(()) }).unwrap(); // TODO handle error;
         
-        let id = match self.getId() {
+        let id = match self.get_id() {
             Some(id) => {
                 conn.execute(
                     "UPDATE contest SET location = ?1,filename = ?2,
@@ -558,7 +558,7 @@ impl MedalObject<Connection> for Contest {
                 conn.query_row("SELECT last_insert_rowid()", &[], |row| {row.get(0)}).unwrap()
             }
         };
-        self.setId(id);
+        self.set_id(id);
         for mut taskgroup in &mut self.taskgroups {
             taskgroup.contest = id;
             taskgroup.save(conn);
@@ -581,12 +581,12 @@ impl MedalObject<Connection> for Participation {
 
 impl MedalObject<Connection> for Submission {
     fn save(&mut self, conn: &Connection) {
-        match self.getId() {
-            Some(id) => 
+        match self.get_id() {
+            Some(_id) => 
                 unimplemented!(),
             None => {
                 conn.execute("INSERT INTO submission (task, session_user, grade, validated, nonvalidated_grade, subtask_identifier, value, date, needs_validation) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9)", &[&self.task, &self.session_user, &self.grade, &self.validated, &self.nonvalidated_grade, &self.subtask_identifier, &self.value, &self.date, &self.needs_validation]).unwrap();
-                self.setId(conn.query_row("SELECT last_insert_rowid()", &[], |row| {row.get(0)}).unwrap())
+                self.set_id(conn.query_row("SELECT last_insert_rowid()", &[], |row| {row.get(0)}).unwrap())
             }
         }
     }
@@ -594,12 +594,12 @@ impl MedalObject<Connection> for Submission {
 
 impl MedalObject<Connection> for Group {
     fn save(&mut self, conn: &Connection) {
-        match self.getId() {
-            Some(id) => 
+        match self.get_id() {
+            Some(_id) => 
                 unimplemented!(),
             None => {
                 conn.execute("INSERT INTO usergroup (name, groupcode, tag, admin) VALUES (?1, ?2, ?3, ?4)", &[&self.name, &self.groupcode, &self.tag, &self.admin]).unwrap();
-                self.setId(conn.query_row("SELECT last_insert_rowid()", &[], |row| {row.get(0)}).unwrap());
+                self.set_id(conn.query_row("SELECT last_insert_rowid()", &[], |row| {row.get(0)}).unwrap());
             }
         }
     }
diff --git a/src/db_objects.rs b/src/db_objects.rs
index 719e6a47be5ec4bdb2a3762711b9b886c8daa0a2..413284ed8d5c49fae4b74f5ffdb5ac3cf39251b8 100644
--- a/src/db_objects.rs
+++ b/src/db_objects.rs
@@ -96,12 +96,12 @@ pub struct Participation {
     pub start: Timespec,
 }
 
-pub trait HasId { fn getId(&self) -> Option<u32>; fn setId(&mut self, id: u32); }
-impl HasId for Submission { fn getId(&self) -> Option<u32> { self.id } fn setId(&mut self, id: u32) { self.id = Some(id);} }
-impl HasId for Task { fn getId(&self) -> Option<u32> { self.id } fn setId(&mut self, id: u32) { self.id = Some(id);} }
-impl HasId for Taskgroup { fn getId(&self) -> Option<u32> { self.id } fn setId(&mut self, id: u32) { self.id = Some(id);} }
-impl HasId for Contest { fn getId(&self) -> Option<u32> { self.id } fn setId(&mut self, id: u32) { self.id = Some(id);} }
-impl HasId for Group { fn getId(&self) -> Option<u32> { self.id } fn setId(&mut self, id: u32) { self.id = Some(id);} }
+pub trait HasId { fn get_id(&self) -> Option<u32>; fn set_id(&mut self, id: u32); }
+impl HasId for Submission { fn get_id(&self) -> Option<u32> { self.id } fn set_id(&mut self, id: u32) { self.id = Some(id);} }
+impl HasId for Task { fn get_id(&self) -> Option<u32> { self.id } fn set_id(&mut self, id: u32) { self.id = Some(id);} }
+impl HasId for Taskgroup { fn get_id(&self) -> Option<u32> { self.id } fn set_id(&mut self, id: u32) { self.id = Some(id);} }
+impl HasId for Contest { fn get_id(&self) -> Option<u32> { self.id } fn set_id(&mut self, id: u32) { self.id = Some(id);} }
+impl HasId for Group { fn get_id(&self) -> Option<u32> { self.id } fn set_id(&mut self, id: u32) { self.id = Some(id);} }
 
 
 impl Contest {
diff --git a/src/functions.rs b/src/functions.rs
index 2976f5221a3ec44cc0072f7604876d207943536a..955cfc6aa5584085815db37c98ac52f72d6fef97 100644
--- a/src/functions.rs
+++ b/src/functions.rs
@@ -1,12 +1,10 @@
 use webfw_iron::{to_json, json_val};
 
-use rusqlite::Connection;
-
 use time;
 
-use rand::{thread_rng, Rng};
+use rand::{thread_rng, Rng,  distributions::Alphanumeric};
 
-use db_conn::{MedalConnection, MedalObject};
+use db_conn::{MedalConnection};
 
 use db_objects::{Submission, Group};
 
@@ -102,7 +100,6 @@ pub fn show_contests<T: MedalConnection>(conn: &T) -> MedalValue {
 
 
 pub fn show_contest<T: MedalConnection>(conn: &T, contest_id: u32, session_token: String) -> MedalValueResult {
-    use std;
     let c = conn.get_contest_by_id_complete(contest_id);
 
     let mut tasks = Vec::new();
@@ -165,7 +162,7 @@ pub fn show_contest<T: MedalConnection>(conn: &T, contest_id: u32, session_token
 }
 
 pub fn start_contest<T: MedalConnection>(conn: &T, contest_id: u32, session_token: String, csrf_token:String) -> MedalResult<()> {
-    let mut data = json_val::Map::new();
+    let data = json_val::Map::new();
 
     match conn.new_participation(session_token, contest_id) {
         Ok(_) => Ok(()),
@@ -351,7 +348,7 @@ pub fn add_group<T: MedalConnection>(conn: &T, session_token: String, csrf_token
         return Err(MedalError::AccessDenied); // CsrfError
     }
 
-    let group_code: String = Some('g').into_iter().chain(thread_rng().gen_ascii_chars())
+    let group_code: String = Some('g').into_iter().chain(thread_rng().sample_iter(&Alphanumeric))
         .filter(|x| {let x = *x; !(x == 'l' || x == 'I' || x == '1' || x == 'O' || x == 'o' || x == '0')})
         .take(7).collect();
     // todo: check for collisions
diff --git a/src/main.rs b/src/main.rs
index 44277fbb63f46f70e9cf15d24caf1b1da1cc4843..2b0161d2f5478c72fbd96eda4e1c52f5164ecd94 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -66,9 +66,7 @@ fn read_config_from_file(filename: &str) -> Config {
             oauth_user_data_url: None,
         }
     }
-} 
-
-
+}
 
 fn read_contest(p: &path::PathBuf) -> Option<Contest> {
     use std::fs::File;
diff --git a/src/webfw_iron.rs b/src/webfw_iron.rs
index 6b007e852178c0c1ee8427d1aa29b5ea647083df..c3035a4c6d8d5f59a5e8aada7f241e492f8a8eaf 100644
--- a/src/webfw_iron.rs
+++ b/src/webfw_iron.rs
@@ -1,13 +1,10 @@
-
 //extern crate serde;
 
-
-
 use std::path::Path;
 
 use iron_sessionstorage::traits::*;
-
 use iron::prelude::*;
+
 use iron::{status, AfterMiddleware};
 use iron::modifiers::Redirect;
 use iron::modifiers::RedirectRaw;
@@ -19,15 +16,12 @@ use staticfile::Static;
 use iron_sessionstorage::SessionStorage;
 use iron_sessionstorage::backends::SignedCookieBackend;
 use rusqlite::Connection;
-use urlencoded::{UrlEncodedBody,UrlEncodedQuery};
+use urlencoded::{UrlEncodedBody};
 use persistent::Write;
 
 use handlebars_iron::{HandlebarsEngine,DirectorySource,Template};
 pub use handlebars_iron::handlebars::to_json;
 
-use iron::prelude::*;
-use iron_sessionstorage::traits::*;
-
 use iron_sessionstorage;
 use iron;
 use reqwest;
@@ -205,7 +199,7 @@ impl<'c, 'a: 'c, 'b: 'c + 'a, T> RequestAugmentMedalError<'c, 'a, 'b, T> for Res
 }
 
 
-fn greet(req: &mut Request) -> IronResult<Response> {
+fn greet(_req: &mut Request) -> IronResult<Response> {
     // hier ggf. Daten aus dem Request holen
 
     // Daten verarbeiten
@@ -279,6 +273,7 @@ fn contest_post(req: &mut Request) -> IronResult<Response> {
         iexpect!(formdata.get("csrftoken"))[0].to_owned()
     };
 
+    // TODO: Was mit dem Result?
     let startcontestresult = {
         let mutex = req.get::<Write<SharedDatabaseConnection>>().unwrap();
         
@@ -569,7 +564,7 @@ fn user(req: &mut Request) -> IronResult<Response> {
     let (template, data) = {
         // hier ggf. Daten aus dem Request holen
         let mutex = req.get::<Write<SharedDatabaseConnection>>().unwrap();
-        let conn = mutex.lock().unwrap_or_else(|e| e.into_inner());
+        let _conn = mutex.lock().unwrap_or_else(|e| e.into_inner());
 
         // Antwort erstellen und zurücksenden   
         //functions::show_contests(&*conn)
@@ -593,7 +588,8 @@ struct OAuthAccess {
 }
 
 #[derive(Deserialize, Debug)]
-pub struct OAuthUserData {
+#[allow(non_snake_case)]
+pub struct OAuthUserData {    
     userID:      Option<String>, // documented as 'userId'
     userId:      Option<String>, // sent as 'userID'
     userType:    String,
@@ -608,7 +604,6 @@ pub struct OAuthUserData {
 fn oauth(req: &mut Request) -> IronResult<Response> {
     use reqwest::header;
     use params::{Params, Value};
-    use std::io::Read;
 
     let (client_id, client_secret, access_token_url, user_data_url) = {
         let mutex = req.get::<Write<SharedConfiguration>>().unwrap();
@@ -621,7 +616,7 @@ fn oauth(req: &mut Request) -> IronResult<Response> {
         }
     };
     
-    let (state, scope, code): (String, String, String) = {
+    let (_state, _scope, code): (String, String, String) = {
         let map = req.get_ref::<Params>().unwrap();
 
         match (map.find(&["state"]),map.find(&["scope"]),map.find(&["code"])) {
@@ -715,7 +710,7 @@ impl Key for SharedConfiguration { type Value = ::Config; }
 
 #[cfg(feature = "watch")]
 pub fn get_handlebars_engine() -> impl AfterMiddleware {
-    /// HandlebarsEngine will look up all files with "./examples/templates/**/*.hbs"
+    // HandlebarsEngine will look up all files with "./examples/templates/**/*.hbs"
     let mut hbse = HandlebarsEngine::new();
     hbse.add(Box::new(DirectorySource::new("./templates/", ".hbs")));
 
@@ -734,7 +729,7 @@ pub fn get_handlebars_engine() -> impl AfterMiddleware {
 
 #[cfg(not(feature = "watch"))]
 pub fn get_handlebars_engine() -> impl AfterMiddleware {
-    /// HandlebarsEngine will look up all files with "./examples/templates/**/*.hbs"
+    // HandlebarsEngine will look up all files with "./examples/templates/**/*.hbs"
     let mut hbse = HandlebarsEngine::new();
     hbse.add(Box::new(DirectorySource::new("./templates/", ".hbs")));
 
@@ -747,7 +742,7 @@ pub fn get_handlebars_engine() -> impl AfterMiddleware {
 }
 
 fn cookie_warning(req: &mut Request) -> IronResult<Response> {
-    match (req.get_session_token()) {
+    match req.get_session_token() {
         Some(session_token) => {
             // TODO: Set session!
             // TODO: