diff --git a/.git/COMMIT_EDITMSG b/.git/COMMIT_EDITMSG
deleted file mode 100644
--- a/.git/COMMIT_EDITMSG
+++ /dev/null
@@ -1,1 +0,0 @@
-Removed SERVER header and set to 0.1.1
diff --git a/.git/FETCH_HEAD b/.git/FETCH_HEAD
--- a/.git/FETCH_HEAD
+++ b/.git/FETCH_HEAD
@@ -0,0 +1,1 @@
+2e95147d7a2c86bb224527a5624c118b53f9c736		branch 'master' of github.com:Hamcha/Ketchup
diff --git a/.git/ORIG_HEAD b/.git/ORIG_HEAD
new file mode 100644
--- /dev/null
+++ b/.git/ORIG_HEAD
@@ -0,0 +1,1 @@
+6dd1040ce0fbc93348725498c912f0e19175d433
diff --git a/.git/config b/.git/config
--- a/.git/config
+++ b/.git/config
@@ -4,7 +4,7 @@
 	bare = false
 	logallrefupdates = true
 [remote "origin"]
-	url = git@github.com:Hamcha/ketchup.git
+	url = git@github.com:Hamcha/Ketchup.git
 	fetch = +refs/heads/*:refs/remotes/origin/*
 [branch "master"]
 	remote = origin
diff --git a/.git/hooks/pre-rebase.sample b/.git/hooks/pre-rebase.sample
--- a/.git/hooks/pre-rebase.sample
+++ b/.git/hooks/pre-rebase.sample
@@ -65,7 +65,7 @@
 	fi
 else
 	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
-	/usr/local/bin/perl -e '
+	/usr/bin/perl -e '
 		my $topic = $ARGV[0];
 		my $msg = "* $topic has commits already merged to public branch:\n";
 		my (%not_in_next) = map {
diff --git a/.git/hooks/prepare-commit-msg.sample b/.git/hooks/prepare-commit-msg.sample
--- a/.git/hooks/prepare-commit-msg.sample
+++ b/.git/hooks/prepare-commit-msg.sample
@@ -22,10 +22,10 @@
 
 case "$2,$3" in
   merge,)
-    /usr/local/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
+    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
 
 # ,|template,)
-#   /usr/local/bin/perl -i.bak -pe '
+#   /usr/bin/perl -i.bak -pe '
 #      print "\n" . `git diff --cached --name-status -r`
 #	 if /^#/ && $first++ == 0' "$1" ;;
 
diff --git a/.git/index b/.git/index
Binary files a/.git/index and b/.git/index differ
diff --git a/.git/logs/HEAD b/.git/logs/HEAD
--- a/.git/logs/HEAD
+++ b/.git/logs/HEAD
@@ -1,12 +1,2 @@
-0000000000000000000000000000000000000000 c1ef5202b4e0351ba9c95229c0edf7dfbfb9bb33 Hamcha <zikyky@gmail.com> 1400868061 +0200	commit (initial): Base commit (most code from httpd)
-c1ef5202b4e0351ba9c95229c0edf7dfbfb9bb33 b197449e22aa6e00dcbb765294c13b957ad35207 Hamcha <zikyky@gmail.com> 1400868225 +0200	commit: Took some useless stuff out
-b197449e22aa6e00dcbb765294c13b957ad35207 622888f76a4bd37398710e1590463719c2129297 Hamcha <zikyky@gmail.com> 1400868258 +0200	commit: .gitignore to avoid commiting binaries or object files
-622888f76a4bd37398710e1590463719c2129297 d752cbde2090cf51b382e0060e0d13a90ef9dfa8 Hamcha <zikyky@gmail.com> 1400871180 +0200	commit: Basic routing should work
-d752cbde2090cf51b382e0060e0d13a90ef9dfa8 708b4d9119f776f28cc85a2a0f58b4bf1c1e7b43 Hamcha <zikyky@gmail.com> 1400871591 +0200	commit: Added types
-708b4d9119f776f28cc85a2a0f58b4bf1c1e7b43 722f61d1774f7fbd456a5ab611c54408e61f2cc6 Hamcha <zikyky@gmail.com> 1400872235 +0200	commit: Replaced incorrect 400 errors with 404 ones
-722f61d1774f7fbd456a5ab611c54408e61f2cc6 1093f2858a4572a7a141c96f251f273da4d55c89 Hamcha <zikyky@gmail.com> 1400884141 +0200	commit: Removed some oleg sauce
-1093f2858a4572a7a141c96f251f273da4d55c89 cf34a7265591f7c3f2d241bd7a554e96c85c68d5 Hamcha <zikyky@gmail.com> 1400935032 +0200	commit: Hackage stuff
-cf34a7265591f7c3f2d241bd7a554e96c85c68d5 6dd1040ce0fbc93348725498c912f0e19175d433 Hamcha <zikyky@gmail.com> 1400936077 +0200	commit: README
-6dd1040ce0fbc93348725498c912f0e19175d433 691816444999b3c2b424bdcef7eeb977fa8b18a5 Hamcha <zikyky@gmail.com> 1400953254 +0200	commit: Chunked encoding
-691816444999b3c2b424bdcef7eeb977fa8b18a5 ab41fa19ef0fbeb0088d8f325b1dc4280cbe9817 Hamcha <zikyky@gmail.com> 1400953623 +0200	commit: Forgot to make it visible
-ab41fa19ef0fbeb0088d8f325b1dc4280cbe9817 2e95147d7a2c86bb224527a5624c118b53f9c736 Hamcha <zikyky@gmail.com> 1400960297 +0200	commit: Removed SERVER header and set to 0.1.1
+0000000000000000000000000000000000000000 6dd1040ce0fbc93348725498c912f0e19175d433 hamcha <hamcha@localhost.localdomain> 1400936747 +0200	clone: from git@github.com:Hamcha/Ketchup.git
+6dd1040ce0fbc93348725498c912f0e19175d433 2e95147d7a2c86bb224527a5624c118b53f9c736 hamcha <hamcha@localhost.localdomain> 1400972318 +0200	pull: Fast-forward
diff --git a/.git/logs/refs/heads/master b/.git/logs/refs/heads/master
--- a/.git/logs/refs/heads/master
+++ b/.git/logs/refs/heads/master
@@ -1,12 +1,2 @@
-0000000000000000000000000000000000000000 c1ef5202b4e0351ba9c95229c0edf7dfbfb9bb33 Hamcha <zikyky@gmail.com> 1400868061 +0200	commit (initial): Base commit (most code from httpd)
-c1ef5202b4e0351ba9c95229c0edf7dfbfb9bb33 b197449e22aa6e00dcbb765294c13b957ad35207 Hamcha <zikyky@gmail.com> 1400868225 +0200	commit: Took some useless stuff out
-b197449e22aa6e00dcbb765294c13b957ad35207 622888f76a4bd37398710e1590463719c2129297 Hamcha <zikyky@gmail.com> 1400868258 +0200	commit: .gitignore to avoid commiting binaries or object files
-622888f76a4bd37398710e1590463719c2129297 d752cbde2090cf51b382e0060e0d13a90ef9dfa8 Hamcha <zikyky@gmail.com> 1400871180 +0200	commit: Basic routing should work
-d752cbde2090cf51b382e0060e0d13a90ef9dfa8 708b4d9119f776f28cc85a2a0f58b4bf1c1e7b43 Hamcha <zikyky@gmail.com> 1400871591 +0200	commit: Added types
-708b4d9119f776f28cc85a2a0f58b4bf1c1e7b43 722f61d1774f7fbd456a5ab611c54408e61f2cc6 Hamcha <zikyky@gmail.com> 1400872235 +0200	commit: Replaced incorrect 400 errors with 404 ones
-722f61d1774f7fbd456a5ab611c54408e61f2cc6 1093f2858a4572a7a141c96f251f273da4d55c89 Hamcha <zikyky@gmail.com> 1400884141 +0200	commit: Removed some oleg sauce
-1093f2858a4572a7a141c96f251f273da4d55c89 cf34a7265591f7c3f2d241bd7a554e96c85c68d5 Hamcha <zikyky@gmail.com> 1400935032 +0200	commit: Hackage stuff
-cf34a7265591f7c3f2d241bd7a554e96c85c68d5 6dd1040ce0fbc93348725498c912f0e19175d433 Hamcha <zikyky@gmail.com> 1400936077 +0200	commit: README
-6dd1040ce0fbc93348725498c912f0e19175d433 691816444999b3c2b424bdcef7eeb977fa8b18a5 Hamcha <zikyky@gmail.com> 1400953254 +0200	commit: Chunked encoding
-691816444999b3c2b424bdcef7eeb977fa8b18a5 ab41fa19ef0fbeb0088d8f325b1dc4280cbe9817 Hamcha <zikyky@gmail.com> 1400953623 +0200	commit: Forgot to make it visible
-ab41fa19ef0fbeb0088d8f325b1dc4280cbe9817 2e95147d7a2c86bb224527a5624c118b53f9c736 Hamcha <zikyky@gmail.com> 1400960297 +0200	commit: Removed SERVER header and set to 0.1.1
+0000000000000000000000000000000000000000 6dd1040ce0fbc93348725498c912f0e19175d433 hamcha <hamcha@localhost.localdomain> 1400936747 +0200	clone: from git@github.com:Hamcha/Ketchup.git
+6dd1040ce0fbc93348725498c912f0e19175d433 2e95147d7a2c86bb224527a5624c118b53f9c736 hamcha <hamcha@localhost.localdomain> 1400972318 +0200	pull: Fast-forward
diff --git a/.git/logs/refs/remotes/origin/HEAD b/.git/logs/refs/remotes/origin/HEAD
new file mode 100644
--- /dev/null
+++ b/.git/logs/refs/remotes/origin/HEAD
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 6dd1040ce0fbc93348725498c912f0e19175d433 hamcha <hamcha@localhost.localdomain> 1400936747 +0200	clone: from git@github.com:Hamcha/Ketchup.git
diff --git a/.git/logs/refs/remotes/origin/master b/.git/logs/refs/remotes/origin/master
--- a/.git/logs/refs/remotes/origin/master
+++ b/.git/logs/refs/remotes/origin/master
@@ -1,11 +1,1 @@
-0000000000000000000000000000000000000000 c1ef5202b4e0351ba9c95229c0edf7dfbfb9bb33 Hamcha <zikyky@gmail.com> 1400868072 +0200	update by push
-c1ef5202b4e0351ba9c95229c0edf7dfbfb9bb33 622888f76a4bd37398710e1590463719c2129297 Hamcha <zikyky@gmail.com> 1400868261 +0200	update by push
-622888f76a4bd37398710e1590463719c2129297 d752cbde2090cf51b382e0060e0d13a90ef9dfa8 Hamcha <zikyky@gmail.com> 1400871184 +0200	update by push
-d752cbde2090cf51b382e0060e0d13a90ef9dfa8 708b4d9119f776f28cc85a2a0f58b4bf1c1e7b43 Hamcha <zikyky@gmail.com> 1400871595 +0200	update by push
-708b4d9119f776f28cc85a2a0f58b4bf1c1e7b43 722f61d1774f7fbd456a5ab611c54408e61f2cc6 Hamcha <zikyky@gmail.com> 1400872238 +0200	update by push
-722f61d1774f7fbd456a5ab611c54408e61f2cc6 1093f2858a4572a7a141c96f251f273da4d55c89 Hamcha <zikyky@gmail.com> 1400884145 +0200	update by push
-1093f2858a4572a7a141c96f251f273da4d55c89 cf34a7265591f7c3f2d241bd7a554e96c85c68d5 Hamcha <zikyky@gmail.com> 1400935037 +0200	update by push
-cf34a7265591f7c3f2d241bd7a554e96c85c68d5 6dd1040ce0fbc93348725498c912f0e19175d433 Hamcha <zikyky@gmail.com> 1400936080 +0200	update by push
-6dd1040ce0fbc93348725498c912f0e19175d433 691816444999b3c2b424bdcef7eeb977fa8b18a5 Hamcha <zikyky@gmail.com> 1400953258 +0200	update by push
-691816444999b3c2b424bdcef7eeb977fa8b18a5 ab41fa19ef0fbeb0088d8f325b1dc4280cbe9817 Hamcha <zikyky@gmail.com> 1400953627 +0200	update by push
-ab41fa19ef0fbeb0088d8f325b1dc4280cbe9817 2e95147d7a2c86bb224527a5624c118b53f9c736 Hamcha <zikyky@gmail.com> 1400960301 +0200	update by push
+6dd1040ce0fbc93348725498c912f0e19175d433 2e95147d7a2c86bb224527a5624c118b53f9c736 hamcha <hamcha@localhost.localdomain> 1400972318 +0200	pull: fast-forward
diff --git a/.git/objects/02/ffa07f6990f74dafd8c9ce6d8fa39b0976d598 b/.git/objects/02/ffa07f6990f74dafd8c9ce6d8fa39b0976d598
deleted file mode 100644
Binary files a/.git/objects/02/ffa07f6990f74dafd8c9ce6d8fa39b0976d598 and /dev/null differ
diff --git a/.git/objects/10/93f2858a4572a7a141c96f251f273da4d55c89 b/.git/objects/10/93f2858a4572a7a141c96f251f273da4d55c89
deleted file mode 100644
Binary files a/.git/objects/10/93f2858a4572a7a141c96f251f273da4d55c89 and /dev/null differ
diff --git a/.git/objects/11/c683f96aaed8fc5cad03cb58c5d1a5cec5f501 b/.git/objects/11/c683f96aaed8fc5cad03cb58c5d1a5cec5f501
deleted file mode 100644
Binary files a/.git/objects/11/c683f96aaed8fc5cad03cb58c5d1a5cec5f501 and /dev/null differ
diff --git a/.git/objects/23/8fd86cd3c476d75eec0d7ae736adb96dd1cc60 b/.git/objects/23/8fd86cd3c476d75eec0d7ae736adb96dd1cc60
deleted file mode 100644
Binary files a/.git/objects/23/8fd86cd3c476d75eec0d7ae736adb96dd1cc60 and /dev/null differ
diff --git a/.git/objects/24/e1f1b0b0f51b252eebca5b168a4e17b4700a4c b/.git/objects/24/e1f1b0b0f51b252eebca5b168a4e17b4700a4c
deleted file mode 100644
Binary files a/.git/objects/24/e1f1b0b0f51b252eebca5b168a4e17b4700a4c and /dev/null differ
diff --git a/.git/objects/2c/b647573d63d84667f629ea1e26e53bd3f16e44 b/.git/objects/2c/b647573d63d84667f629ea1e26e53bd3f16e44
deleted file mode 100644
Binary files a/.git/objects/2c/b647573d63d84667f629ea1e26e53bd3f16e44 and /dev/null differ
diff --git a/.git/objects/2d/d01b33323df8fd6ac686cc492d77822e040e1f b/.git/objects/2d/d01b33323df8fd6ac686cc492d77822e040e1f
deleted file mode 100644
Binary files a/.git/objects/2d/d01b33323df8fd6ac686cc492d77822e040e1f and /dev/null differ
diff --git a/.git/objects/32/4d07aa12666c2f03139f626361d1a810c45bc1 b/.git/objects/32/4d07aa12666c2f03139f626361d1a810c45bc1
deleted file mode 100644
--- a/.git/objects/32/4d07aa12666c2f03139f626361d1a810c45bc1
+++ /dev/null
@@ -1,1 +0,0 @@
-xÅRÁn1Í:»í¡AÑ	Ò(¨)4"ôPE²«zmÇ7 (ÿÞ1¹¥×ø`Ù~3OïÍóJÛ\|ÎO{§ð}4»ù9º¹Ñk+ª{òÙ8í½´[íVmUÔSYx*Ñcz¬jg=Ácºú]¡¯d¼#lºA¿U6.áÓW^×-Òº®?!rê?øÜFbIJ)b}¥Qàñô²ðm·o@£æèôn_ò)ÏááL\YCh¨·Ø9]x[ÊJªµXvL5­&ët<Ì?î¯­YKâæbÍ\è¿lL"â«!SG¯» l5,²CX6¼1OôUjJV6Þ×Iùq8©uof²F0¼±EÆÐQù<ûÁ¶Ã6¶§#2³Tr@ÀkvµA45ß§}míè@Ä^Ksð.z.ÙR^+jît¯ûIeûFÖæÖá©òoMß4ºâÌd±¸q.`òÏÿ°mé
diff --git a/.git/objects/35/3e50d70c86a2ab186edac1c205561befde3dc7 b/.git/objects/35/3e50d70c86a2ab186edac1c205561befde3dc7
deleted file mode 100644
Binary files a/.git/objects/35/3e50d70c86a2ab186edac1c205561befde3dc7 and /dev/null differ
diff --git a/.git/objects/36/d1bfaedb400023ee2b6ced7d3847183c454838 b/.git/objects/36/d1bfaedb400023ee2b6ced7d3847183c454838
deleted file mode 100644
--- a/.git/objects/36/d1bfaedb400023ee2b6ced7d3847183c454838
+++ /dev/null
@@ -1,2 +0,0 @@
-x¥TÁn@íxr"$¶RUU¨¸MR5vªÄU³.(K%¶[÷ß;kÔHå`ÏîÌ¼y3oà^È{¼~óêíÃ\M/¿]~ÄÍWB²wZEÉ÷'Ã_¶e[±rÁñëe§Þ­Ì5¹mË"ÛuÈ¶Å©T9Ñ*â>0Í¼ó­æ¨7zaÜ<aiáÔ~Ô¡p¥uñO¹^KõP)©a4ÂÜ7êàÜÉå×¾ÇÕlöå?æ<+ÎÄ+j7Ã[·ÈùtÇuÝm¬è¦°5\æº%MTíkûÈxL¥¾y ò4GÊ^2wï0ibFºÀÉUd<.µ¤\øp2B$ë ä)R¦XÏ3ÐR®ë(ã5ó?_©_ýføåÚ¼HÖ@i`çs)mY+ÍãT0ÍáW<hX8Å(ýéKu¤AÇiiTÁûM,xÈ¶¯¸ÜaßÇ¶°ÛÊiÍíRa>ö\lD»´6êY+tìKØýQß`Pè_ 3mÖÍùT6KE¤ÑÙ/z®ø	¿é7+Æ¿×÷óÿÇÚ×PÇ´x+%ãëÖí«Hh®à$RÃ3óò@»è6T>/üé9
-Ö¡vãôz^ÏmªØ-}4Jq7­®½§×©ÿ*ý¡X,
diff --git a/.git/objects/45/3bd93c26a9e271a06ba2646d2fed80284a3d7e b/.git/objects/45/3bd93c26a9e271a06ba2646d2fed80284a3d7e
deleted file mode 100644
Binary files a/.git/objects/45/3bd93c26a9e271a06ba2646d2fed80284a3d7e and /dev/null differ
diff --git a/.git/objects/45/fa42399476a801f23b96599909ab8939757cd4 b/.git/objects/45/fa42399476a801f23b96599909ab8939757cd4
deleted file mode 100644
Binary files a/.git/objects/45/fa42399476a801f23b96599909ab8939757cd4 and /dev/null differ
diff --git a/.git/objects/49/c47bca8a7edae0d0851b71284aa6b39a400cc4 b/.git/objects/49/c47bca8a7edae0d0851b71284aa6b39a400cc4
deleted file mode 100644
Binary files a/.git/objects/49/c47bca8a7edae0d0851b71284aa6b39a400cc4 and /dev/null differ
diff --git a/.git/objects/56/2c5d11641eeb9f7ae77cd0d177fd8c947ed1e9 b/.git/objects/56/2c5d11641eeb9f7ae77cd0d177fd8c947ed1e9
deleted file mode 100644
Binary files a/.git/objects/56/2c5d11641eeb9f7ae77cd0d177fd8c947ed1e9 and /dev/null differ
diff --git a/.git/objects/58/4b0ea086479c87718b10715c5375a4715e6965 b/.git/objects/58/4b0ea086479c87718b10715c5375a4715e6965
deleted file mode 100644
Binary files a/.git/objects/58/4b0ea086479c87718b10715c5375a4715e6965 and /dev/null differ
diff --git a/.git/objects/5c/ad4e38d5d9795fd867fe17bdc34c18ac26dfc6 b/.git/objects/5c/ad4e38d5d9795fd867fe17bdc34c18ac26dfc6
deleted file mode 100644
Binary files a/.git/objects/5c/ad4e38d5d9795fd867fe17bdc34c18ac26dfc6 and /dev/null differ
diff --git a/.git/objects/62/2888f76a4bd37398710e1590463719c2129297 b/.git/objects/62/2888f76a4bd37398710e1590463719c2129297
deleted file mode 100644
--- a/.git/objects/62/2888f76a4bd37398710e1590463719c2129297
+++ /dev/null
@@ -1,2 +0,0 @@
-xMJ1F]çµêt~AÄ¥×¨TjzÊt$ñô6x·ï}<î­éë×§9DÏR}¸HäÂB³çàmMÁ§ÕÍù¤!û²äè\k V.%óìxYKöêê-FC_óÒ¼SãÁË^×ÇÛÖHo'îíB²>Á3ZDsÐ#mÊ¿$sÚtê¶÷!0;Ðw×
-OºoPt§¡r#¥á	g½ÉÝü|7Q,
diff --git a/.git/objects/63/3f2583dc912547dc4bbb06de8bd1a7c275fcf2 b/.git/objects/63/3f2583dc912547dc4bbb06de8bd1a7c275fcf2
deleted file mode 100644
Binary files a/.git/objects/63/3f2583dc912547dc4bbb06de8bd1a7c275fcf2 and /dev/null differ
diff --git a/.git/objects/66/5fba0e7ceccafda2b2a4e92e342ff2cbfe8247 b/.git/objects/66/5fba0e7ceccafda2b2a4e92e342ff2cbfe8247
deleted file mode 100644
--- a/.git/objects/66/5fba0e7ceccafda2b2a4e92e342ff2cbfe8247
+++ /dev/null
@@ -1,2 +0,0 @@
-x+)JMU041c040031QÐKÏ,ÉLÏË/Je`ú¿ >sÂwßõ7NËí_<³ìê PðN-IÎ(-`¼Æò¡EóÃÕ%óËz+¹³EHÚBÍñMÌNMËÌIeh|oz}³³»Èª¥%·øW~ËªI­HÌ-ÈIÕË(f0òe_%£Ï,<?)9ñâ
-#ÑÍ:
diff --git a/.git/objects/69/367db2a6835d21762b09eec97395dd0f1d503e b/.git/objects/69/367db2a6835d21762b09eec97395dd0f1d503e
deleted file mode 100644
Binary files a/.git/objects/69/367db2a6835d21762b09eec97395dd0f1d503e and /dev/null differ
diff --git a/.git/objects/6d/d1040ce0fbc93348725498c912f0e19175d433 b/.git/objects/6d/d1040ce0fbc93348725498c912f0e19175d433
deleted file mode 100644
Binary files a/.git/objects/6d/d1040ce0fbc93348725498c912f0e19175d433 and /dev/null differ
diff --git a/.git/objects/70/8b4d9119f776f28cc85a2a0f58b4bf1c1e7b43 b/.git/objects/70/8b4d9119f776f28cc85a2a0f58b4bf1c1e7b43
deleted file mode 100644
--- a/.git/objects/70/8b4d9119f776f28cc85a2a0f58b4bf1c1e7b43
+++ /dev/null
@@ -1,2 +0,0 @@
-xÎM
-Â0@a×9Åìü5Ñ×&[jl©qQOo¯àöÁ/ÍµÆC[EÀùÂÎX":¨±=u¸d)ø²S¯òj7©Ïb0¯{ v(µeB)GÅ6Ì+Ü¹¦áü§mÚ®ÊãóæzícÐ4Ñ ª½îkMþBê³dhÛ"oõÌP@Ú
diff --git a/.git/objects/72/2f61d1774f7fbd456a5ab611c54408e61f2cc6 b/.git/objects/72/2f61d1774f7fbd456a5ab611c54408e61f2cc6
deleted file mode 100644
Binary files a/.git/objects/72/2f61d1774f7fbd456a5ab611c54408e61f2cc6 and /dev/null differ
diff --git a/.git/objects/81/ef35d79e1603434714aaa57410da0fa9f71e6e b/.git/objects/81/ef35d79e1603434714aaa57410da0fa9f71e6e
deleted file mode 100644
Binary files a/.git/objects/81/ef35d79e1603434714aaa57410da0fa9f71e6e and /dev/null differ
diff --git a/.git/objects/85/2ae7db61bff45b972b9a21023e162f5003d74d b/.git/objects/85/2ae7db61bff45b972b9a21023e162f5003d74d
deleted file mode 100644
--- a/.git/objects/85/2ae7db61bff45b972b9a21023e162f5003d74d
+++ /dev/null
@@ -1,1 +0,0 @@
-x±jÃ0;ü?dIi	H!vKv¡³b"m9'¹¥¾{%7vª¶Ó}Ü}ÿ[Ärµºù3<mwíî/oÄ­Wô>²ëO3ñUeÑy=¶Gy®e1G¢º²XàÝS]7x8ªuÆÆ½JV~&BTÿc²¶o3\_a\ß43»°TC¼[d1±o¢ó=çÉ°KQ¢2Ã¾¥Së5ªßâîO}¡600eU¦ÌécZ2¥ËJÍZjöÃ«ué\¹okßsð
diff --git a/.git/objects/85/d7f3da362229792ee03571c10da871b205a69f b/.git/objects/85/d7f3da362229792ee03571c10da871b205a69f
deleted file mode 100644
Binary files a/.git/objects/85/d7f3da362229792ee03571c10da871b205a69f and /dev/null differ
diff --git a/.git/objects/85/df8a78c3966d87d24b5e8eac0a2bdcbf243c47 b/.git/objects/85/df8a78c3966d87d24b5e8eac0a2bdcbf243c47
deleted file mode 100644
Binary files a/.git/objects/85/df8a78c3966d87d24b5e8eac0a2bdcbf243c47 and /dev/null differ
diff --git a/.git/objects/8a/4e26e09c96d9bd95bbefa4c2cde4fbf8087382 b/.git/objects/8a/4e26e09c96d9bd95bbefa4c2cde4fbf8087382
deleted file mode 100644
--- a/.git/objects/8a/4e26e09c96d9bd95bbefa4c2cde4fbf8087382
+++ /dev/null
@@ -1,1 +0,0 @@
-xKÊÉOR0·`HÌÉ±RH­HÌ-ÈIååâå2­x¹8Ó3a2zÅ ÉäÔÄ<TQ®^¾>ÔËÈ332Ißå
diff --git a/.git/objects/93/ac39e13883ec31ab749f768d790b6b14a0193d b/.git/objects/93/ac39e13883ec31ab749f768d790b6b14a0193d
deleted file mode 100644
Binary files a/.git/objects/93/ac39e13883ec31ab749f768d790b6b14a0193d and /dev/null differ
diff --git a/.git/objects/a4/52888e3b29d25f2f4b06e3f1cae1ddba210add b/.git/objects/a4/52888e3b29d25f2f4b06e3f1cae1ddba210add
deleted file mode 100644
--- a/.git/objects/a4/52888e3b29d25f2f4b06e3f1cae1ddba210add
+++ /dev/null
@@ -1,1 +0,0 @@
-xEÐAKÃ0`Ïþì¢²vUAv¨UeÎÒæÓ²¤K¿¨Cüï&ÛÔBÞäÉÔÊÔpv~rðávz7{Î®áþ­2\ x"+õ[Ãø;DN!,¸ÔðÑ¢Å°(W±ÿã©i]Ì:ñ¯WòU¢+N<)6;xEZ®×[-Àâ.@hØµxÄNm¶ÙiByÈ.&Ô/7²QÉ?iÜÒJ±ê¨ò@ßÝûØwÓßÀóEÒÝpe§Ðæ/Æ»öäfuÎFÎªËÆu÷XµS}âge8²ýð/¡6(é=_.3¤vÏû}«q1
diff --git a/.git/objects/b1/97449e22aa6e00dcbb765294c13b957ad35207 b/.git/objects/b1/97449e22aa6e00dcbb765294c13b957ad35207
deleted file mode 100644
--- a/.git/objects/b1/97449e22aa6e00dcbb765294c13b957ad35207
+++ /dev/null
@@ -1,3 +0,0 @@
-xÎM
-Â0@a×9ÅìN~ÚKà&ÉDK&]èéõ
-n|ðb-eî@äv}cuH^GrìÆÑ&g\¢,iBë4zñ*Ïql	)AmÀ>zKä#JÊcÊ!Ö·~¯+\¸Ä;Ãñ3/ïå}¾XË	8¹ÈÂ	Qýêo­Ë_H]k] Õ"°5yHkÐú3Ô­«/THg
diff --git a/.git/objects/b6/3279c85b76f94cc28de65c1a8c2f65c1814e7e b/.git/objects/b6/3279c85b76f94cc28de65c1a8c2f65c1814e7e
deleted file mode 100644
Binary files a/.git/objects/b6/3279c85b76f94cc28de65c1a8c2f65c1814e7e and /dev/null differ
diff --git a/.git/objects/c1/ef5202b4e0351ba9c95229c0edf7dfbfb9bb33 b/.git/objects/c1/ef5202b4e0351ba9c95229c0edf7dfbfb9bb33
deleted file mode 100644
--- a/.git/objects/c1/ef5202b4e0351ba9c95229c0edf7dfbfb9bb33
+++ /dev/null
@@ -1,2 +0,0 @@
-xA
-Â0E]ç³T1i¸òcÚRH;.êéxïÃã¿TDFÍFç¡·lÎg{fËÔ¶!4xGJb²Éß:n,i`8}ÆiÖËCx|R3C>¢'ØãÑÔµ^iþK2W^2üTØJY´BW;ç"0¨¾ºù¢;U
diff --git a/.git/objects/c6/56325a56d86c044bb5136b9e8dafa421c4f758 b/.git/objects/c6/56325a56d86c044bb5136b9e8dafa421c4f758
deleted file mode 100644
Binary files a/.git/objects/c6/56325a56d86c044bb5136b9e8dafa421c4f758 and /dev/null differ
diff --git a/.git/objects/cf/34a7265591f7c3f2d241bd7a554e96c85c68d5 b/.git/objects/cf/34a7265591f7c3f2d241bd7a554e96c85c68d5
deleted file mode 100644
Binary files a/.git/objects/cf/34a7265591f7c3f2d241bd7a554e96c85c68d5 and /dev/null differ
diff --git a/.git/objects/cf/ed5d601e7c6661a4c95c652d865834a2960cc4 b/.git/objects/cf/ed5d601e7c6661a4c95c652d865834a2960cc4
deleted file mode 100644
--- a/.git/objects/cf/ed5d601e7c6661a4c95c652d865834a2960cc4
+++ /dev/null
@@ -1,1 +0,0 @@
-x+)JMU041c040031QÐKÏ,ÉLÏË/Je`ú¿ >sÂwßõ7NËí_<³ìê PðN-IÎ(-`xûîý½¦+%ÕOû_ýöC\~í¨9¾Ù©i9©ïM¯ÏcvvYµ´DàÿÊïryP5©¹9©zÅK:ú¬5/Åë{³=þxêáÝ]\w]>¿
diff --git a/.git/objects/d7/52cbde2090cf51b382e0060e0d13a90ef9dfa8 b/.git/objects/d7/52cbde2090cf51b382e0060e0d13a90ef9dfa8
deleted file mode 100644
--- a/.git/objects/d7/52cbde2090cf51b382e0060e0d13a90ef9dfa8
+++ /dev/null
@@ -1,1 +0,0 @@
-xÎMjÃ0@á®uÙÊh¬èB	Yõãñ(¢¢Èôôõº}ðÁVk@äÞFWïOyfÔ *Âya&ÒÉQÎ$sÖH.oîúàb9xvó2)Å`Qí)¡óS°IÈR¢ïcm¾¸ÊÊpþ-Ûk{]nËýCZýël#Â;¢9ê±6ô_È\ùYzÛGyÜà¹¶ý¾ÀOëù:©F¤
diff --git a/.git/objects/de/16c2da1cc71609774e151a4e6034c07965db8c b/.git/objects/de/16c2da1cc71609774e151a4e6034c07965db8c
deleted file mode 100644
Binary files a/.git/objects/de/16c2da1cc71609774e151a4e6034c07965db8c and /dev/null differ
diff --git a/.git/objects/df/0eddb596d9d9aff78156e3cae6300250de9155 b/.git/objects/df/0eddb596d9d9aff78156e3cae6300250de9155
deleted file mode 100644
Binary files a/.git/objects/df/0eddb596d9d9aff78156e3cae6300250de9155 and /dev/null differ
diff --git a/.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 b/.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
deleted file mode 100644
Binary files a/.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 and /dev/null differ
diff --git a/.git/objects/e8/7a4422a7db2bee721ce1a88d5286ca1570d36a b/.git/objects/e8/7a4422a7db2bee721ce1a88d5286ca1570d36a
deleted file mode 100644
Binary files a/.git/objects/e8/7a4422a7db2bee721ce1a88d5286ca1570d36a and /dev/null differ
diff --git a/.git/objects/ed/eeef90bd35a9192643cb4fd5f6e108171fadb4 b/.git/objects/ed/eeef90bd35a9192643cb4fd5f6e108171fadb4
deleted file mode 100644
Binary files a/.git/objects/ed/eeef90bd35a9192643cb4fd5f6e108171fadb4 and /dev/null differ
diff --git a/.git/objects/f3/073c846e4efaa3a1997750b01c078c36a14718 b/.git/objects/f3/073c846e4efaa3a1997750b01c078c36a14718
deleted file mode 100644
Binary files a/.git/objects/f3/073c846e4efaa3a1997750b01c078c36a14718 and /dev/null differ
diff --git a/.git/objects/fb/f8eefabf8c61b21569f198ed873cc8558acd68 b/.git/objects/fb/f8eefabf8c61b21569f198ed873cc8558acd68
deleted file mode 100644
--- a/.git/objects/fb/f8eefabf8c61b21569f198ed873cc8558acd68
+++ /dev/null
@@ -1,3 +0,0 @@
-x¥SMOÜ0í9RþÃÓ´ié©BÊÒJe[	Zõ8ìm,9qðìÒíg¬Ó%R¥ú<oß¼±o¾ÁÑÑÛ7¯~îáüäËÙ÷³øz/Ò~é¬Zìþ£8ª4÷Jà³p·¥o²í¥ã(¡PÄQR
-âHV6w)¹ã=s,;];ÑfEÉÌ;0b
-¼`M_y+Høä\ÃÛã:¸º%«9i5âÎëÃ2~±Ýèó¡01ÇM1.£qQÏH¼2E²$bwbkÞFãZì£aUöåº@­yö ­´ÿ	òÞÙþkñw#éty£àDÕ(æòú'²ù!][]BÒßY¸ªé¼[{p@®°îsíæ+ä9Öm<^9¾O»h«"«½RX`­®É¦LÙ´ÈJÁ8Ñ÷üx8úéI#Ò¡¹µó×ó¶ç^_èøwóÁ¹ÖÏíÀ^2t-®Î%}K©0Hjí&3ÐHw\7¸ÿÛè3ß§ÝLf³Ù,Ýµ~ÚÏ¤ÈÝDV£©ÛGzÿ?­} ¹Cn
diff --git a/.git/objects/pack/pack-5ae4b09f7084bd1231ef67774ae0cc24689625e4.idx b/.git/objects/pack/pack-5ae4b09f7084bd1231ef67774ae0cc24689625e4.idx
new file mode 100644
Binary files /dev/null and b/.git/objects/pack/pack-5ae4b09f7084bd1231ef67774ae0cc24689625e4.idx differ
diff --git a/.git/objects/pack/pack-5ae4b09f7084bd1231ef67774ae0cc24689625e4.pack b/.git/objects/pack/pack-5ae4b09f7084bd1231ef67774ae0cc24689625e4.pack
new file mode 100644
Binary files /dev/null and b/.git/objects/pack/pack-5ae4b09f7084bd1231ef67774ae0cc24689625e4.pack differ
diff --git a/.git/packed-refs b/.git/packed-refs
new file mode 100644
--- /dev/null
+++ b/.git/packed-refs
@@ -0,0 +1,2 @@
+# pack-refs with: peeled fully-peeled 
+6dd1040ce0fbc93348725498c912f0e19175d433 refs/remotes/origin/master
diff --git a/.git/refs/remotes/origin/HEAD b/.git/refs/remotes/origin/HEAD
new file mode 100644
--- /dev/null
+++ b/.git/refs/remotes/origin/HEAD
@@ -0,0 +1,1 @@
+ref: refs/remotes/origin/master
diff --git a/Ketchup.cabal b/Ketchup.cabal
--- a/Ketchup.cabal
+++ b/Ketchup.cabal
@@ -1,5 +1,5 @@
 Name:           Ketchup
-Version:        0.1.1
+Version:        0.1.2
 Cabal-Version:  >= 1.6
 Build-Type:     Simple
 License:        MIT
@@ -21,9 +21,10 @@
 
   Build-Depends:
     base          ==4.*,
+    bytestring    >=0.9 && <0.11,
     containers    >=0.2 && <0.6,
     network        <2.5,
-    bytestring    >=0.9 && <0.11
+    regex-posix    <1.0
 
 Source-Repository head
   type:       git
diff --git a/Ketchup.cabal~ b/Ketchup.cabal~
--- a/Ketchup.cabal~
+++ b/Ketchup.cabal~
@@ -1,5 +1,5 @@
 Name:           Ketchup
-Version:        0.1.0
+Version:        0.1.1
 Cabal-Version:  >= 1.6
 Build-Type:     Simple
 License:        MIT
@@ -14,16 +14,17 @@
   Exposed-Modules:
     Ketchup.Httpd,
     Ketchup.Routing
-	Ketchup.Chunked
+    Ketchup.Chunked
 
   Other-Modules:
     Ketchup.Utils
 
   Build-Depends:
     base          ==4.*,
+    bytestring    >=0.9 && <0.11,
     containers    >=0.2 && <0.6,
     network        <2.5,
-    bytestring    >=0.9 && <0.11
+    regex-posix    <1.0
 
 Source-Repository head
   type:       git
diff --git a/Ketchup/.Routing.hs.swp b/Ketchup/.Routing.hs.swp
new file mode 100644
Binary files /dev/null and b/Ketchup/.Routing.hs.swp differ
diff --git a/Ketchup/Httpd.hs b/Ketchup/Httpd.hs
--- a/Ketchup/Httpd.hs
+++ b/Ketchup/Httpd.hs
@@ -134,4 +134,4 @@
     NS.bindSocket sock addr
     NS.listen sock 128
     createAcceptorPool sock 128 cback
-    sClose sock
+    sClose sock
diff --git a/Ketchup/Httpd.hs~ b/Ketchup/Httpd.hs~
new file mode 100644
--- /dev/null
+++ b/Ketchup/Httpd.hs~
@@ -0,0 +1,138 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Ketchup.Httpd
+( HTTPRequest
+, method, uri, httpver, headers
+, statusMsg
+, sendReply
+, listenHTTP
+, sendBadRequest
+, sendNotFound
+) where
+
+import           Control.Concurrent (forkIO)
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Char8 as C
+import qualified Data.Map as Map
+import qualified Data.List as List
+import           Network
+import qualified Network.Socket as NS
+import           Network.Socket.ByteString
+import           Ketchup.Utils
+import           System.IO
+
+-- HTTP Request type
+data HTTPRequest = HTTPRequest { method  :: B.ByteString
+                               , uri     :: B.ByteString
+                               , httpver :: B.ByteString
+                               , headers :: Map.Map B.ByteString [B.ByteString]
+                               } deriving (Show)
+
+-- Returns status message from status id
+statusMsg :: Int -> B.ByteString
+statusMsg stat
+    -- 200 Success
+    | stat == 200 = "200 OK"
+    | stat == 201 = "201 Created"
+    | stat == 204 = "204 No Content"
+    -- 400 Client Errors
+    | stat == 400 = "400 Bad Request"
+    | stat == 403 = "403 Forbidden"
+    | stat == 404 = "404 Not Found"
+    | stat == 405 = "405 Method Not Allowed"
+    | stat == 410 = "410 Gone"
+    -- 500 Server Errors
+    | stat == 500 = "500 Internal Server Error"
+    | stat == 501 = "501 Not Implemented"
+    | stat == 502 = "502 Bad Gateway"
+    | stat == 503 = "503 Service Unavailable"
+    | otherwise   = "500 Internal Server Error"
+
+sendBadRequest :: Socket -> IO ()
+sendBadRequest client = do
+    sendReply client 400 [("Content-Type",["text/plain"])] "400 Bad Request!\n"
+
+sendNotFound :: Socket -> IO ()
+sendNotFound client = do
+    sendReply client 404 [("Content-Type",["text/plain"])] "404 Not Found!\n"
+
+-- Sends HTTP reply
+sendReply :: Socket -> Int -> [(B.ByteString, [B.ByteString])] -> B.ByteString -> IO ()
+sendReply client status headers body = do
+    sendAll client reply
+    where
+    reply = B.concat ["HTTP/1.1 ", statusMsg status,"\r\n\
+        \Content-Length: ", C.pack $ show $ C.length body, "\r\n\
+        \Connection: close\r\n",heads,"\r\n",body]
+    -- Turn ("a", ["b", "c"]) headers into "a: b,c"
+    heads = B.concat $ map (\x -> B.concat [fst x, ": ", B.concat $ List.intersperse "," $ snd x, "\r\n"]) headers
+
+-- Parses header lines
+parseRequestLine :: B.ByteString -> (B.ByteString, [B.ByteString])
+parseRequestLine line =
+    (property, values)
+    where
+    property = head items
+    values = C.split ',' $ (trim . last) items
+    items = C.split ':' line
+
+-- Gets all request lines
+getRequest :: Socket -> IO [B.ByteString]
+getRequest client = do
+    content <- recv client 1024
+    return $ C.lines content
+
+-- Parses requests
+parseRequest :: [B.ByteString] -> HTTPRequest
+parseRequest reqlines =
+    HTTPRequest { method=met, uri=ur, httpver=ver, headers=heads }
+    where
+    [met, ur, ver] = (C.words . head) reqlines -- First line is METHOD URI VERSION
+    heads = Map.fromList $ map parseRequestLine $ tail reqlines
+
+-- Handles each client request
+handleRequest :: Socket -> (Socket -> HTTPRequest -> IO ()) -> IO ()
+handleRequest client cback = do
+    reqlines <- getRequest client
+    case length reqlines of
+        0 -> sendBadRequest client
+        _ -> cback client $ parseRequest reqlines
+    sClose client
+
+-- Acceptor
+acceptAll :: Socket -> (Socket -> HTTPRequest -> IO ()) -> IO ()
+acceptAll sock cback = do
+    (client, _) <- NS.accept sock
+    handleRequest client cback
+    acceptAll sock cback
+
+-- Creates Acceptor pools
+createAcceptorPool :: Socket -> Int -> (Socket -> HTTPRequest -> IO ()) -> IO ()
+createAcceptorPool sock max cback =
+    case max of
+        0 -> acceptAll sock cback
+        x -> do
+            forkIO $ acceptAll sock cback
+            createAcceptorPool sock (x-1) cback
+
+-- Gets host from hostname string
+getHostaddr :: String -> IO NS.HostAddress
+getHostaddr "*"  = return NS.iNADDR_ANY
+getHostaddr host = NS.inet_addr host
+
+-- Listens for incoming HTTP request
+listenHTTP :: String -> PortNumber -> (Socket -> HTTPRequest -> IO ()) -> IO ()
+listenHTTP hostname port cback = withSocketsDo $ do
+    -- Get hostname
+    host <- getHostaddr hostname
+    let addr = NS.SockAddrInet port host
+    putStr $ concat ["{* Listening on ", show addr, " (POOL SIZE ", show 128, "*}"] 
+    -- Prepare Socket
+    sock <- NS.socket NS.AF_INET NS.Stream 0
+    NS.setSocketOption sock NS.ReuseAddr 1
+    NS.setSocketOption sock NS.NoDelay 1
+    -- Bind socket to address and listen
+    NS.bindSocket sock addr
+    NS.listen sock 128
+    createAcceptorPool sock 128 cback
+    sClose sock
diff --git a/Ketchup/Routing.hs b/Ketchup/Routing.hs
--- a/Ketchup/Routing.hs
+++ b/Ketchup/Routing.hs
@@ -8,6 +8,7 @@
 import qualified Data.Map as M
 import           Ketchup.Httpd
 import           Network
+import qualified Text.Regex.Posix as R
 
 route :: [(C.ByteString, (Socket -> HTTPRequest -> (M.Map C.ByteString C.ByteString) -> IO ()))]
          -> (Socket -> HTTPRequest -> IO ())
@@ -21,7 +22,7 @@
     and $ zipWith compare urlparts tmpparts
     where
     compare x y
-        | x == y                  = True
+        | x R.=~ y                = True
         | or [C.null y, C.null x] = False
         | C.head y == ':'         = True
         | otherwise               = False
@@ -37,4 +38,4 @@
         | C.head y == ':'         = (C.tail y, x)
         | otherwise               = ("","")
     urlparts = C.split '/' url
-    tmpparts = C.split '/' template
+    tmpparts = C.split '/' template
diff --git a/Ketchup/Routing.hs~ b/Ketchup/Routing.hs~
new file mode 100644
--- /dev/null
+++ b/Ketchup/Routing.hs~
@@ -0,0 +1,41 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Ketchup.Routing
+( route
+) where
+
+import qualified Data.ByteString.Char8 as C
+import qualified Data.Map as M
+import           Ketchup.Httpd
+import           Network
+import qualified Text.Regex.Posix
+
+route :: [(C.ByteString, (Socket -> HTTPRequest -> (M.Map C.ByteString C.ByteString) -> IO ()))]
+         -> (Socket -> HTTPRequest -> IO ())
+route []         handle request = sendNotFound handle
+route (r:routes) handle request
+    | match (uri request) (fst r) = (snd r) handle request $ params (uri request) (fst r)
+    | otherwise                   = route routes handle request
+
+match :: C.ByteString -> C.ByteString -> Bool
+match url template =
+    and $ zipWith compare urlparts tmpparts
+    where
+    compare x y
+        | x =~ y                  = True
+        | or [C.null y, C.null x] = False
+        | C.head y == ':'         = True
+        | otherwise               = False
+    urlparts = C.split '/' url
+    tmpparts = C.split '/' template
+
+params :: C.ByteString -> C.ByteString -> M.Map C.ByteString C.ByteString
+params url template =
+    M.fromList $ filter (not . C.null . fst) $ zipWith retrieve urlparts tmpparts
+    where
+    retrieve x y
+        | or [C.null y, C.null x] = ("","")
+        | C.head y == ':'         = (C.tail y, x)
+        | otherwise               = ("","")
+    urlparts = C.split '/' url
+    tmpparts = C.split '/' template
diff --git a/Makefile~ b/Makefile~
deleted file mode 100644
--- a/Makefile~
+++ /dev/null
@@ -1,8 +0,0 @@
-all: example
-
-example:
-	ghc example.hs
-
-clean:
-	rm -rf ./example
-	rm -rf *.o */*.o *.hi */*.hi
