diff --git a/.git/COMMIT_EDITMSG b/.git/COMMIT_EDITMSG
--- a/.git/COMMIT_EDITMSG
+++ b/.git/COMMIT_EDITMSG
@@ -1,1 +1,1 @@
-0.2.2 - POST DATA
+Fixed chunked encoding not working
diff --git a/.git/FETCH_HEAD b/.git/FETCH_HEAD
--- a/.git/FETCH_HEAD
+++ b/.git/FETCH_HEAD
@@ -1,1 +1,2 @@
-a06d1fbe75dfe3b2ebe7e03bed4f97c8b05468e3		branch 'master' of github.com:Hamcha/ketchup
+b83c2375bba608232746064adfdb067cf57e5d80		branch 'master' of github.com:Hamcha/ketchup
+4ac44b6241517d43310da25b086e175b3b9c0b49	not-for-merge	branch 'gh-pages' of github.com:Hamcha/ketchup
diff --git a/.git/ORIG_HEAD b/.git/ORIG_HEAD
--- a/.git/ORIG_HEAD
+++ b/.git/ORIG_HEAD
@@ -1,1 +1,1 @@
-c09136db3f6d1b79503253d341373405dd2f0e13
+b83c2375bba608232746064adfdb067cf57e5d80
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
@@ -15,3 +15,8 @@
 b473be4e130f0ee35eb42d4037b2c99ee5003326 c09136db3f6d1b79503253d341373405dd2f0e13 Hamcha <zikyky@gmail.com> 1401541834 +0200	commit: Switch to PCRE regexps
 c09136db3f6d1b79503253d341373405dd2f0e13 a06d1fbe75dfe3b2ebe7e03bed4f97c8b05468e3 Hamcha <zikyky@gmail.com> 1401998815 +0200	pull: Fast-forward
 a06d1fbe75dfe3b2ebe7e03bed4f97c8b05468e3 a8f041ca842f9d4b30406cf727910b74b3cc92d6 Hamcha <zikyky@gmail.com> 1402149852 +0200	commit: 0.2.2 - POST DATA
+a8f041ca842f9d4b30406cf727910b74b3cc92d6 464d078f996682b5330d9821891c67f6e58c303f Hamcha <zikyky@gmail.com> 1402151933 +0200	commit: Prettier docs
+464d078f996682b5330d9821891c67f6e58c303f a71ae79e4cf33baeecab2eeecf21ae31d35dd99f Hamcha <zikyky@gmail.com> 1402152719 +0200	commit: Tree shaking depenencies
+a71ae79e4cf33baeecab2eeecf21ae31d35dd99f 0ef1467fc037c2b698808c4f8670b06f437a44c5 Hamcha <zikyky@gmail.com> 1402152846 +0200	commit: Updated readme
+0ef1467fc037c2b698808c4f8670b06f437a44c5 b83c2375bba608232746064adfdb067cf57e5d80 Hamcha <zikyky@gmail.com> 1402175260 +0200	commit: Static doesn't depend on Routing anymore
+b83c2375bba608232746064adfdb067cf57e5d80 4ad51f9dc87b6aa48cb614030521d957b8498622 Hamcha <zikyky@gmail.com> 1403296411 +0200	commit: Fixed chunked encoding not working
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
@@ -15,3 +15,8 @@
 b473be4e130f0ee35eb42d4037b2c99ee5003326 c09136db3f6d1b79503253d341373405dd2f0e13 Hamcha <zikyky@gmail.com> 1401541834 +0200	commit: Switch to PCRE regexps
 c09136db3f6d1b79503253d341373405dd2f0e13 a06d1fbe75dfe3b2ebe7e03bed4f97c8b05468e3 Hamcha <zikyky@gmail.com> 1401998815 +0200	pull: Fast-forward
 a06d1fbe75dfe3b2ebe7e03bed4f97c8b05468e3 a8f041ca842f9d4b30406cf727910b74b3cc92d6 Hamcha <zikyky@gmail.com> 1402149852 +0200	commit: 0.2.2 - POST DATA
+a8f041ca842f9d4b30406cf727910b74b3cc92d6 464d078f996682b5330d9821891c67f6e58c303f Hamcha <zikyky@gmail.com> 1402151933 +0200	commit: Prettier docs
+464d078f996682b5330d9821891c67f6e58c303f a71ae79e4cf33baeecab2eeecf21ae31d35dd99f Hamcha <zikyky@gmail.com> 1402152719 +0200	commit: Tree shaking depenencies
+a71ae79e4cf33baeecab2eeecf21ae31d35dd99f 0ef1467fc037c2b698808c4f8670b06f437a44c5 Hamcha <zikyky@gmail.com> 1402152846 +0200	commit: Updated readme
+0ef1467fc037c2b698808c4f8670b06f437a44c5 b83c2375bba608232746064adfdb067cf57e5d80 Hamcha <zikyky@gmail.com> 1402175260 +0200	commit: Static doesn't depend on Routing anymore
+b83c2375bba608232746064adfdb067cf57e5d80 4ad51f9dc87b6aa48cb614030521d957b8498622 Hamcha <zikyky@gmail.com> 1403296411 +0200	commit: Fixed chunked encoding not working
diff --git a/.git/logs/refs/remotes/origin/gh-pages b/.git/logs/refs/remotes/origin/gh-pages
new file mode 100644
--- /dev/null
+++ b/.git/logs/refs/remotes/origin/gh-pages
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 4ac44b6241517d43310da25b086e175b3b9c0b49 Hamcha <zikyky@gmail.com> 1402364070 +0200	pull: storing head
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
@@ -14,3 +14,8 @@
 b473be4e130f0ee35eb42d4037b2c99ee5003326 c09136db3f6d1b79503253d341373405dd2f0e13 Hamcha <zikyky@gmail.com> 1401541838 +0200	update by push
 c09136db3f6d1b79503253d341373405dd2f0e13 a06d1fbe75dfe3b2ebe7e03bed4f97c8b05468e3 Hamcha <zikyky@gmail.com> 1401998815 +0200	pull: fast-forward
 a06d1fbe75dfe3b2ebe7e03bed4f97c8b05468e3 a8f041ca842f9d4b30406cf727910b74b3cc92d6 Hamcha <zikyky@gmail.com> 1402149856 +0200	update by push
+a8f041ca842f9d4b30406cf727910b74b3cc92d6 464d078f996682b5330d9821891c67f6e58c303f Hamcha <zikyky@gmail.com> 1402151936 +0200	update by push
+464d078f996682b5330d9821891c67f6e58c303f a71ae79e4cf33baeecab2eeecf21ae31d35dd99f Hamcha <zikyky@gmail.com> 1402152722 +0200	update by push
+a71ae79e4cf33baeecab2eeecf21ae31d35dd99f 0ef1467fc037c2b698808c4f8670b06f437a44c5 Hamcha <zikyky@gmail.com> 1402152850 +0200	update by push
+0ef1467fc037c2b698808c4f8670b06f437a44c5 b83c2375bba608232746064adfdb067cf57e5d80 Hamcha <zikyky@gmail.com> 1402175263 +0200	update by push
+b83c2375bba608232746064adfdb067cf57e5d80 4ad51f9dc87b6aa48cb614030521d957b8498622 Hamcha <zikyky@gmail.com> 1403296415 +0200	update by push
diff --git a/.git/objects/01/51025fe33749b1b065bfaaddeac482e2554582 b/.git/objects/01/51025fe33749b1b065bfaaddeac482e2554582
new file mode 100644
Binary files /dev/null and b/.git/objects/01/51025fe33749b1b065bfaaddeac482e2554582 differ
diff --git a/.git/objects/0c/06892b80ad9e05a48ed2f816c1bc9ef49ca69a b/.git/objects/0c/06892b80ad9e05a48ed2f816c1bc9ef49ca69a
new file mode 100644
Binary files /dev/null and b/.git/objects/0c/06892b80ad9e05a48ed2f816c1bc9ef49ca69a differ
diff --git a/.git/objects/0e/f1467fc037c2b698808c4f8670b06f437a44c5 b/.git/objects/0e/f1467fc037c2b698808c4f8670b06f437a44c5
new file mode 100644
--- /dev/null
+++ b/.git/objects/0e/f1467fc037c2b698808c4f8670b06f437a44c5
@@ -0,0 +1,2 @@
+xA
+Â0E]çÙ$m".½d&¶hl	qQOo®àêÃ{<øi-eiÁZÑ<ôY¬]Íàc&bJnBAïPmTåÝ4@2q)[I$QDé±l=sYÑ§ÍkÕ7*i&}þ.Ïý¹_×)­å¢ÁôÑ 1ªÓ~­É_ºoLMXW!.¢~ÛD
diff --git a/.git/objects/0f/f8579fbd897417b0d6dad6e920f8882138a7c0 b/.git/objects/0f/f8579fbd897417b0d6dad6e920f8882138a7c0
new file mode 100644
Binary files /dev/null and b/.git/objects/0f/f8579fbd897417b0d6dad6e920f8882138a7c0 differ
diff --git a/.git/objects/12/103f6ad6c8b32cef7a550d8d4d8307f656b9ec b/.git/objects/12/103f6ad6c8b32cef7a550d8d4d8307f656b9ec
new file mode 100644
Binary files /dev/null and b/.git/objects/12/103f6ad6c8b32cef7a550d8d4d8307f656b9ec differ
diff --git a/.git/objects/19/29f404bd7463b75013763eac1c2fe1bbb03373 b/.git/objects/19/29f404bd7463b75013763eac1c2fe1bbb03373
new file mode 100644
Binary files /dev/null and b/.git/objects/19/29f404bd7463b75013763eac1c2fe1bbb03373 differ
diff --git a/.git/objects/1b/4e38d4a513de8e2fc27d9619999a1732330561 b/.git/objects/1b/4e38d4a513de8e2fc27d9619999a1732330561
new file mode 100644
Binary files /dev/null and b/.git/objects/1b/4e38d4a513de8e2fc27d9619999a1732330561 differ
diff --git a/.git/objects/1d/eac2fe1a42e35b994f1b855488f392c50f6a89 b/.git/objects/1d/eac2fe1a42e35b994f1b855488f392c50f6a89
new file mode 100644
Binary files /dev/null and b/.git/objects/1d/eac2fe1a42e35b994f1b855488f392c50f6a89 differ
diff --git a/.git/objects/1f/964c52d8194986ca6879905fbd25488f457fae b/.git/objects/1f/964c52d8194986ca6879905fbd25488f457fae
new file mode 100644
Binary files /dev/null and b/.git/objects/1f/964c52d8194986ca6879905fbd25488f457fae differ
diff --git a/.git/objects/20/3fe722984873d04f9997788065406b008051c1 b/.git/objects/20/3fe722984873d04f9997788065406b008051c1
new file mode 100644
Binary files /dev/null and b/.git/objects/20/3fe722984873d04f9997788065406b008051c1 differ
diff --git a/.git/objects/24/ee306a70ec71338f47f012e1a7ec5668e1851b b/.git/objects/24/ee306a70ec71338f47f012e1a7ec5668e1851b
new file mode 100644
Binary files /dev/null and b/.git/objects/24/ee306a70ec71338f47f012e1a7ec5668e1851b differ
diff --git a/.git/objects/27/af847de0afe29dffa87ef0d755c84f830e4941 b/.git/objects/27/af847de0afe29dffa87ef0d755c84f830e4941
new file mode 100644
Binary files /dev/null and b/.git/objects/27/af847de0afe29dffa87ef0d755c84f830e4941 differ
diff --git a/.git/objects/29/6daef4bb0fb9e15cdcf2ed42512b88b79ed514 b/.git/objects/29/6daef4bb0fb9e15cdcf2ed42512b88b79ed514
new file mode 100644
Binary files /dev/null and b/.git/objects/29/6daef4bb0fb9e15cdcf2ed42512b88b79ed514 differ
diff --git a/.git/objects/2c/373856c51ba9550fca9b27b974c3a63db3d7b9 b/.git/objects/2c/373856c51ba9550fca9b27b974c3a63db3d7b9
new file mode 100644
Binary files /dev/null and b/.git/objects/2c/373856c51ba9550fca9b27b974c3a63db3d7b9 differ
diff --git a/.git/objects/2c/a5438db72b33a2c171f3e9ae9b73bd59c2fd49 b/.git/objects/2c/a5438db72b33a2c171f3e9ae9b73bd59c2fd49
new file mode 100644
Binary files /dev/null and b/.git/objects/2c/a5438db72b33a2c171f3e9ae9b73bd59c2fd49 differ
diff --git a/.git/objects/2d/15c14173d23f664b955cd24f51c82f5f09d91d b/.git/objects/2d/15c14173d23f664b955cd24f51c82f5f09d91d
new file mode 100644
--- /dev/null
+++ b/.git/objects/2d/15c14173d23f664b955cd24f51c82f5f09d91d
@@ -0,0 +1,1 @@
+xKÊÉOR0µdp÷t³°LädàdÈÀðïß¿¦¦&&&& r200ôô/àÞ¶iNÓ©ÎêèÂóçJ8¬^<W
diff --git a/.git/objects/35/cdbdae6aa4d9a87e4e3b7c1f21f1d2e90d691e b/.git/objects/35/cdbdae6aa4d9a87e4e3b7c1f21f1d2e90d691e
new file mode 100644
Binary files /dev/null and b/.git/objects/35/cdbdae6aa4d9a87e4e3b7c1f21f1d2e90d691e differ
diff --git a/.git/objects/3d/f33a565ba1673aeae361ffa0bdd75ad5aa87fb b/.git/objects/3d/f33a565ba1673aeae361ffa0bdd75ad5aa87fb
new file mode 100644
Binary files /dev/null and b/.git/objects/3d/f33a565ba1673aeae361ffa0bdd75ad5aa87fb differ
diff --git a/.git/objects/42/238709f16db39e5eaaf8841791e35d3c4484e3 b/.git/objects/42/238709f16db39e5eaaf8841791e35d3c4484e3
new file mode 100644
Binary files /dev/null and b/.git/objects/42/238709f16db39e5eaaf8841791e35d3c4484e3 differ
diff --git a/.git/objects/46/4d078f996682b5330d9821891c67f6e58c303f b/.git/objects/46/4d078f996682b5330d9821891c67f6e58c303f
new file mode 100644
Binary files /dev/null and b/.git/objects/46/4d078f996682b5330d9821891c67f6e58c303f differ
diff --git a/.git/objects/4a/c44b6241517d43310da25b086e175b3b9c0b49 b/.git/objects/4a/c44b6241517d43310da25b086e175b3b9c0b49
new file mode 100644
Binary files /dev/null and b/.git/objects/4a/c44b6241517d43310da25b086e175b3b9c0b49 differ
diff --git a/.git/objects/4a/d51f9dc87b6aa48cb614030521d957b8498622 b/.git/objects/4a/d51f9dc87b6aa48cb614030521d957b8498622
new file mode 100644
--- /dev/null
+++ b/.git/objects/4a/d51f9dc87b6aa48cb614030521d957b8498622
@@ -0,0 +1,2 @@
+xAj!E³öµei«CÈjÈ5´¬drúx¬þçñ|îµdÌË8E@Lb­8ZRÊÆ8o2£Æ³Bóë¦¾â)m@
+Éø9òÖ¡³1o9¡ó¼-^PÅÇØû	±òáú[çñ|¿×X>_¹×7Ð­Îj$D5é¼6ä_ºÉÀû£3¥qÏ¥Ý¡õßý<fWcJ
diff --git a/.git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 b/.git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
new file mode 100644
Binary files /dev/null and b/.git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 differ
diff --git a/.git/objects/4b/839965d93e9f73dc1f00fac60ce31619cf27bf b/.git/objects/4b/839965d93e9f73dc1f00fac60ce31619cf27bf
new file mode 100644
Binary files /dev/null and b/.git/objects/4b/839965d93e9f73dc1f00fac60ce31619cf27bf differ
diff --git a/.git/objects/4b/b6b3f484c6c64383b85aff399a1f385357e138 b/.git/objects/4b/b6b3f484c6c64383b85aff399a1f385357e138
new file mode 100644
Binary files /dev/null and b/.git/objects/4b/b6b3f484c6c64383b85aff399a1f385357e138 differ
diff --git a/.git/objects/4f/6d438c143bd74eb0fea554c57583a51f92e890 b/.git/objects/4f/6d438c143bd74eb0fea554c57583a51f92e890
new file mode 100644
Binary files /dev/null and b/.git/objects/4f/6d438c143bd74eb0fea554c57583a51f92e890 differ
diff --git a/.git/objects/55/61e9ab1a9d86b8fcecc70202d0263cb525a1ed b/.git/objects/55/61e9ab1a9d86b8fcecc70202d0263cb525a1ed
new file mode 100644
Binary files /dev/null and b/.git/objects/55/61e9ab1a9d86b8fcecc70202d0263cb525a1ed differ
diff --git a/.git/objects/5a/6881a3d40966a591bf4431aaae918faa3d3ac5 b/.git/objects/5a/6881a3d40966a591bf4431aaae918faa3d3ac5
new file mode 100644
--- /dev/null
+++ b/.git/objects/5a/6881a3d40966a591bf4431aaae918faa3d3ac5
@@ -0,0 +1,3 @@
+xuRQoÚ@Þs~E'$ÑiUUJ­´M®9§9qäÂÓmûïó](¡ñBÎþ>Ûßg?ió½/~Çgðx3¹ßÜàûZmD9%«ggñß(ZYi¯Hi^É©4j«?:ð£Å(RëÒXM%´ÊJ¸$á°.ÜæÂ^p0|ÇÂþ°3|£dT¤Fr÷SÌûD¥üzNJ»ÓôéÕØUòM­ñ4;Ý:Âur§,¦dìÚÒ +£7å¨EqjíqrQHÖÇgbÈ=s`*[ø¸5aTûWW0l¸Ìÿ?å@ÚÜ9Ú8È¬YG{ ÀÃ®ó®`f´Dyh¹>Hð	J_·ÏSS¤`Q»PYÅn{¤2Òÿ¥9¦«@=dÉ}©ª(E3ï
+&ÁuÌ½®±@eRá¼/ß£¶9³9L,
+épTå`<0ò'zøÜëÁ¢Ýº5aAñl[b«»XóÊZëQúrBþáñÞGÌD¥ÉÌ£1«ªãëÄ9e/éÂÌÖÂ+µ"8ÿt~°ÔÆB³!¬Ô+Íá-FÑa	'ÇÂÆ£Êjè)¼·au.<Úê ´(e[Â»v£ð#cñÌ÷Òæû&¾¨v¿­$iu T¢ëÀ5\ÚõMu<Iôx°QG
diff --git a/.git/objects/5b/b8bdb97c488abfbfcfe0925cd02d0db1df869d b/.git/objects/5b/b8bdb97c488abfbfcfe0925cd02d0db1df869d
new file mode 100644
Binary files /dev/null and b/.git/objects/5b/b8bdb97c488abfbfcfe0925cd02d0db1df869d differ
diff --git a/.git/objects/5c/d6ac78a332a4565cc05200276028bb0ad7b381 b/.git/objects/5c/d6ac78a332a4565cc05200276028bb0ad7b381
new file mode 100644
Binary files /dev/null and b/.git/objects/5c/d6ac78a332a4565cc05200276028bb0ad7b381 differ
diff --git a/.git/objects/5e/48387ea9b3a9fa8fa903f54477534cf8d8dd62 b/.git/objects/5e/48387ea9b3a9fa8fa903f54477534cf8d8dd62
new file mode 100644
Binary files /dev/null and b/.git/objects/5e/48387ea9b3a9fa8fa903f54477534cf8d8dd62 differ
diff --git a/.git/objects/60/c2748b7df2f5721d8c242094c744d7a777b56f b/.git/objects/60/c2748b7df2f5721d8c242094c744d7a777b56f
new file mode 100644
Binary files /dev/null and b/.git/objects/60/c2748b7df2f5721d8c242094c744d7a777b56f differ
diff --git a/.git/objects/63/fea90271bdd5df9433756fd72126105cdbe5b7 b/.git/objects/63/fea90271bdd5df9433756fd72126105cdbe5b7
new file mode 100644
Binary files /dev/null and b/.git/objects/63/fea90271bdd5df9433756fd72126105cdbe5b7 differ
diff --git a/.git/objects/75/be0ead191c37fdda11fdd628c79538651403da b/.git/objects/75/be0ead191c37fdda11fdd628c79538651403da
new file mode 100644
Binary files /dev/null and b/.git/objects/75/be0ead191c37fdda11fdd628c79538651403da differ
diff --git a/.git/objects/76/86c4a999a50079bfd907f126625c1c46def3a3 b/.git/objects/76/86c4a999a50079bfd907f126625c1c46def3a3
new file mode 100644
Binary files /dev/null and b/.git/objects/76/86c4a999a50079bfd907f126625c1c46def3a3 differ
diff --git a/.git/objects/82/94ea0d9b3cece7eab328cd560b903f4de899f2 b/.git/objects/82/94ea0d9b3cece7eab328cd560b903f4de899f2
new file mode 100644
Binary files /dev/null and b/.git/objects/82/94ea0d9b3cece7eab328cd560b903f4de899f2 differ
diff --git a/.git/objects/85/fb86ec84907bcc86531dc82871948ff4d471fa b/.git/objects/85/fb86ec84907bcc86531dc82871948ff4d471fa
new file mode 100644
Binary files /dev/null and b/.git/objects/85/fb86ec84907bcc86531dc82871948ff4d471fa differ
diff --git a/.git/objects/87/675ebd8ba75eb85ed5ad0ba5888fce6076010c b/.git/objects/87/675ebd8ba75eb85ed5ad0ba5888fce6076010c
new file mode 100644
Binary files /dev/null and b/.git/objects/87/675ebd8ba75eb85ed5ad0ba5888fce6076010c differ
diff --git a/.git/objects/9a/6fccf7fcd2cd8aea37d5ec6057d9c18b6652a0 b/.git/objects/9a/6fccf7fcd2cd8aea37d5ec6057d9c18b6652a0
new file mode 100644
Binary files /dev/null and b/.git/objects/9a/6fccf7fcd2cd8aea37d5ec6057d9c18b6652a0 differ
diff --git a/.git/objects/9b/b7324cccda0268cf5e5f318992da50b4f4f003 b/.git/objects/9b/b7324cccda0268cf5e5f318992da50b4f4f003
new file mode 100644
--- /dev/null
+++ b/.git/objects/9b/b7324cccda0268cf5e5f318992da50b4f4f003
@@ -0,0 +1,4 @@
+x­QÑnÓ0å¹_áí!1Õ$ ki¤CC6¡L¦=¸ömãÕµC|Ó´Bü;v´2Æ¼ù^ßsÎ½ç,´]ÉËWÏ£ÙU^|½¾ %n4¹¾y31öù4glVÌÈËâÃã¤¨¹q
+5\3vñZ"Vgµm·§±­W¬øÄvkÀÃ3Âd,QÒ,éôvm\úËx2ôà0
+\fÉû-±à[£¶)Í­A0û
+(}R²À>%¢äµLo·ÑkJX BÙ{@Q6UYLXßN´2kRÖ°L©ÀM,£¤R{®@JÐ:Ý@NéUt*NÔªBâjáoãRZ±T:¾÷tè{¾åý¬¿õ¯,Ðc,9ºÍgçÅùí¨UFÚ6¶F[.IJ!r|B¾W|sß?>þ»»ËF"¬7uaå(Ò2Ê/!Õ¶/­l4Dajß¯ÐÜù¨¯ýÓÃÊàáÊÇS/¹w`@[z|éíldâãóíOË¬/»e¼^ùTé+¿Èá_Â¸ßâ·MþUõI¹ÿ«FvG<úÕ¤Ö»ÌBtþØàPöKX
diff --git a/.git/objects/9d/e2c9da7719f0fc9bc022d1377992812a7544bb b/.git/objects/9d/e2c9da7719f0fc9bc022d1377992812a7544bb
new file mode 100644
Binary files /dev/null and b/.git/objects/9d/e2c9da7719f0fc9bc022d1377992812a7544bb differ
diff --git a/.git/objects/9e/7e76a48901351049e9c6fe083ba4bb95c2c43f b/.git/objects/9e/7e76a48901351049e9c6fe083ba4bb95c2c43f
new file mode 100644
Binary files /dev/null and b/.git/objects/9e/7e76a48901351049e9c6fe083ba4bb95c2c43f differ
diff --git a/.git/objects/a4/0d122f65722cef8bbeaa4192b0c65f24e3dac8 b/.git/objects/a4/0d122f65722cef8bbeaa4192b0c65f24e3dac8
new file mode 100644
Binary files /dev/null and b/.git/objects/a4/0d122f65722cef8bbeaa4192b0c65f24e3dac8 differ
diff --git a/.git/objects/a7/1ae79e4cf33baeecab2eeecf21ae31d35dd99f b/.git/objects/a7/1ae79e4cf33baeecab2eeecf21ae31d35dd99f
new file mode 100644
Binary files /dev/null and b/.git/objects/a7/1ae79e4cf33baeecab2eeecf21ae31d35dd99f differ
diff --git a/.git/objects/a9/cfae246b204d28cdead9aa089ae8a7cded99b0 b/.git/objects/a9/cfae246b204d28cdead9aa089ae8a7cded99b0
new file mode 100644
Binary files /dev/null and b/.git/objects/a9/cfae246b204d28cdead9aa089ae8a7cded99b0 differ
diff --git a/.git/objects/ac/1fd40fffacfeb8c1880a86e9dc0aa50c9c3cf2 b/.git/objects/ac/1fd40fffacfeb8c1880a86e9dc0aa50c9c3cf2
new file mode 100644
--- /dev/null
+++ b/.git/objects/ac/1fd40fffacfeb8c1880a86e9dc0aa50c9c3cf2
@@ -0,0 +1,1 @@
+xuQßoÓ0æ¹ÅÍ¼lÉQíuM"vDad4íÁµÝÆkøÚ´BüïØIÄ*ow§ïÇÝ}KãðúüâEv2¿ßo¯¡¢Û»7÷3`	â×óâ¼Ã·wåÇÓWP6ÜzMÚYn¯?1`Q}Ø¶mÚ§®Ycù÷QkÉCÐ3$Yu~û±>ÿÊx2ôäU\ÙF[R¨[½ËÙÌYRòP+¢ïrFjOÕ§ *ÞxEù]ù6¹`EF*>(Õ¶N¿'-2ì§Ñö	ªF­ræâ6Þ3hÉ§Q¾RPðl:@ÇÎÙM¤t&^4º&ð§q)xJ¶¤MúäØ|Ç{l8ûªÈöpÙÉýl~U^ÝZm¥kSgãrXm­éÀéü¬ùZ-Âüôlúk:B|x(FÏ&Øÿtéä´ÌÙF[z×·NnJ"H5a^0Ü¤¯£ûëu¸ °%t§Yq¡ÙA\}¬~Úk÷õ!¤Ï%!¾Ü]ú.¥ð9Þ¬ClÃuX fÈñó~gqä¿³5ü
diff --git a/.git/objects/ac/65ccb7a09106d00d93cb9ce559e6265ae9bdba b/.git/objects/ac/65ccb7a09106d00d93cb9ce559e6265ae9bdba
new file mode 100644
Binary files /dev/null and b/.git/objects/ac/65ccb7a09106d00d93cb9ce559e6265ae9bdba differ
diff --git a/.git/objects/b5/c49f759d54940ec00c97cc026a1e759eaeacc1 b/.git/objects/b5/c49f759d54940ec00c97cc026a1e759eaeacc1
new file mode 100644
Binary files /dev/null and b/.git/objects/b5/c49f759d54940ec00c97cc026a1e759eaeacc1 differ
diff --git a/.git/objects/b6/4527d35ee22c00cd184fb921429a7db1984bf8 b/.git/objects/b6/4527d35ee22c00cd184fb921429a7db1984bf8
new file mode 100644
Binary files /dev/null and b/.git/objects/b6/4527d35ee22c00cd184fb921429a7db1984bf8 differ
diff --git a/.git/objects/b8/3c2375bba608232746064adfdb067cf57e5d80 b/.git/objects/b8/3c2375bba608232746064adfdb067cf57e5d80
new file mode 100644
Binary files /dev/null and b/.git/objects/b8/3c2375bba608232746064adfdb067cf57e5d80 differ
diff --git a/.git/objects/bb/f0dc8f66b96264fdfae4c0bf005d5338436767 b/.git/objects/bb/f0dc8f66b96264fdfae4c0bf005d5338436767
new file mode 100644
Binary files /dev/null and b/.git/objects/bb/f0dc8f66b96264fdfae4c0bf005d5338436767 differ
diff --git a/.git/objects/bf/bd19dedb8b81537db010dab8523cf46ca5e8a8 b/.git/objects/bf/bd19dedb8b81537db010dab8523cf46ca5e8a8
new file mode 100644
Binary files /dev/null and b/.git/objects/bf/bd19dedb8b81537db010dab8523cf46ca5e8a8 differ
diff --git a/.git/objects/d6/92ca264bd3fbdb96606ebd98c8386f57bcea99 b/.git/objects/d6/92ca264bd3fbdb96606ebd98c8386f57bcea99
new file mode 100644
Binary files /dev/null and b/.git/objects/d6/92ca264bd3fbdb96606ebd98c8386f57bcea99 differ
diff --git a/.git/objects/d7/b08975219be4409e54bcb5fa9ae7a85def6e31 b/.git/objects/d7/b08975219be4409e54bcb5fa9ae7a85def6e31
new file mode 100644
Binary files /dev/null and b/.git/objects/d7/b08975219be4409e54bcb5fa9ae7a85def6e31 differ
diff --git a/.git/objects/dd/9b5e8fb8df41e00992dcbedf38edd8c0d25531 b/.git/objects/dd/9b5e8fb8df41e00992dcbedf38edd8c0d25531
new file mode 100644
Binary files /dev/null and b/.git/objects/dd/9b5e8fb8df41e00992dcbedf38edd8c0d25531 differ
diff --git a/.git/objects/e8/1ac2e44e625bbd33673dc01092b64e2ca8679f b/.git/objects/e8/1ac2e44e625bbd33673dc01092b64e2ca8679f
new file mode 100644
Binary files /dev/null and b/.git/objects/e8/1ac2e44e625bbd33673dc01092b64e2ca8679f differ
diff --git a/.git/objects/eb/218fa1ac0207d8e1eecff6a59b9789e1bc7df4 b/.git/objects/eb/218fa1ac0207d8e1eecff6a59b9789e1bc7df4
new file mode 100644
Binary files /dev/null and b/.git/objects/eb/218fa1ac0207d8e1eecff6a59b9789e1bc7df4 differ
diff --git a/.git/objects/ed/f08a80f0a001b76e1fd26def6ae46c7d2d0cad b/.git/objects/ed/f08a80f0a001b76e1fd26def6ae46c7d2d0cad
new file mode 100644
Binary files /dev/null and b/.git/objects/ed/f08a80f0a001b76e1fd26def6ae46c7d2d0cad differ
diff --git a/.git/objects/f2/6ab906a9c670c4cf1c0d85fb9e2ba66049cd5b b/.git/objects/f2/6ab906a9c670c4cf1c0d85fb9e2ba66049cd5b
new file mode 100644
Binary files /dev/null and b/.git/objects/f2/6ab906a9c670c4cf1c0d85fb9e2ba66049cd5b differ
diff --git a/.git/objects/fe/f7206a98cfe55dcb825c24d91f8179fa26d8ab b/.git/objects/fe/f7206a98cfe55dcb825c24d91f8179fa26d8ab
new file mode 100644
Binary files /dev/null and b/.git/objects/fe/f7206a98cfe55dcb825c24d91f8179fa26d8ab differ
diff --git a/.git/refs/heads/master b/.git/refs/heads/master
--- a/.git/refs/heads/master
+++ b/.git/refs/heads/master
@@ -1,1 +1,1 @@
-a8f041ca842f9d4b30406cf727910b74b3cc92d6
+4ad51f9dc87b6aa48cb614030521d957b8498622
diff --git a/.git/refs/remotes/origin/gh-pages b/.git/refs/remotes/origin/gh-pages
new file mode 100644
--- /dev/null
+++ b/.git/refs/remotes/origin/gh-pages
@@ -0,0 +1,1 @@
+4ac44b6241517d43310da25b086e175b3b9c0b49
diff --git a/.git/refs/remotes/origin/master b/.git/refs/remotes/origin/master
--- a/.git/refs/remotes/origin/master
+++ b/.git/refs/remotes/origin/master
@@ -1,1 +1,1 @@
-a8f041ca842f9d4b30406cf727910b74b3cc92d6
+4ad51f9dc87b6aa48cb614030521d957b8498622
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,6 @@
 *.hi
 *.o
 example
-dist
+dist
+docs
+gendocs.sh
diff --git a/.gitignore~ b/.gitignore~
new file mode 100644
--- /dev/null
+++ b/.gitignore~
@@ -0,0 +1,5 @@
+*.hi
+*.o
+example
+dist
+docs
diff --git a/Ketchup.cabal b/Ketchup.cabal
--- a/Ketchup.cabal
+++ b/Ketchup.cabal
@@ -1,5 +1,5 @@
 Name:           Ketchup
-Version:        0.2.2
+Version:        0.2.3
 Cabal-Version:  >= 1.6
 Build-Type:     Simple
 License:        MIT
@@ -10,15 +10,16 @@
 Category:       Web, Ketchup
 Synopsis:       A super small web framework for those who don't like big and fancy codebases
 Description:
-    Ketchup is a very small HTTP server implementation, the HTTPd itself is one file with
-    around 100 LoC!
+    Ketchup is a very small HTTP server implementation, currently under 300 LoC total!
     .
     Ketchup is also made to be as modular and embeddable as possible, if you want a cabal-free Haskell app, just take those two/three files you need and put it in your project!
     .
     Currently Ketchup comes with:
     .
     * Basic httpd functionality (IPV4 only for now)
+    .
     * Regexp routing with parameters (ie. \`/user/:name/(.\*)\`)
+    .
     * Static file handler (ie. \`static \".\"\` as route/handler)
     .
     Most of the project is dependency-free and only uses stuff included in Prelude, with the exception of Ketchup.Static who uses the mime-types package from Hackage, which is a single separately downloadable file.
diff --git a/Ketchup/Auth.hs b/Ketchup/Auth.hs
new file mode 100644
--- /dev/null
+++ b/Ketchup/Auth.hs
@@ -0,0 +1,10 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Ketchup.Auth
+( basicAuth
+) where
+
+import qualified Data.ByteString.Char8 as B
+import           Ketchup.Utils
+
+basicAuth :: B.ByteString -> Handler
diff --git a/Ketchup/Chunked.hs b/Ketchup/Chunked.hs
--- a/Ketchup/Chunked.hs
+++ b/Ketchup/Chunked.hs
@@ -23,7 +23,7 @@
     sendAll handle content
     where
     content = B.concat ["HTTP/1.1 ", statusMsg status, "\r\n\
-        \Connection: close\r\n",heads,"\r\n\
+        \Connection: close\r\n",heads,"\
         \Transfer-Encoding: chunked\r\n\r\n"]
     heads = B.concat $ map toHeader headers
     toHeader x = B.concat [fst x, ": "
diff --git a/Ketchup/Chunked.hs~ b/Ketchup/Chunked.hs~
new file mode 100644
--- /dev/null
+++ b/Ketchup/Chunked.hs~
@@ -0,0 +1,46 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Ketchup.Chunked
+( chunkHeaders
+, chunk
+, endchunk
+) where
+
+import qualified Data.ByteString.Char8 as B
+import qualified Data.List as List
+import           Ketchup.Httpd
+import           Ketchup.Utils
+import           Network
+import           Network.Socket.ByteString
+import           Numeric
+
+-- |Send HTTP reply headers and begin a Chunked transmission
+chunkHeaders :: Socket                           -- ^ Socket to write to
+             -> Int                              -- ^ Status code
+             -> [(B.ByteString, [B.ByteString])] -- ^ Headers
+             -> IO ()
+chunkHeaders handle status headers = do
+    sendAll handle content
+    where
+    content = B.concat ["HTTP/1.1 ", statusMsg status, "\r\n\
+        \Connection: close\r\n",heads,"\r\n\
+        \Transfer-Encoding: chunked\r\n\r\n"]
+    heads = B.concat $ map toHeader headers
+    toHeader x = B.concat [fst x, ": "
+                          ,B.concat $ List.intersperse "," $ snd x
+                          ,"\r\n"]
+
+-- |Sends a chunk
+chunk :: Socket       -- ^ Socket to write to
+      -> B.ByteString -- ^ Content to write
+      -> IO ()
+chunk handle value =
+    sendAll handle content
+    where
+    content = B.concat [B.pack $ showHex (B.length value) "",
+                        "\r\n", value, "\r\n"]
+
+-- |Send the final/closing chunk
+endchunk :: Socket -- ^ Socket to write to
+         -> IO ()
+endchunk handle = sendAll handle "0\r\n\r\n"
diff --git a/Ketchup/Httpd.hs b/Ketchup/Httpd.hs
--- a/Ketchup/Httpd.hs
+++ b/Ketchup/Httpd.hs
@@ -8,14 +8,12 @@
 ) where
 
 import           Control.Concurrent (forkIO)
-import qualified Data.ByteString as B
-import qualified Data.ByteString.Char8 as C
+import qualified Data.ByteString.Char8 as B
 import qualified Data.Map as Map
 import           Network
 import qualified Network.Socket as NS
 import           Network.Socket.ByteString
 import           Ketchup.Utils
-import           System.IO
 
 type Headers  = Map.Map B.ByteString [B.ByteString]
 type Handler  = Socket -> HTTPRequest -> IO ()
@@ -36,8 +34,8 @@
     (property, values)
     where
     property = head items
-    values   = C.split ',' $ (trim . last) items
-    items    = C.split ':' line
+    values   = B.split ',' $ (trim . last) items
+    items    = B.split ':' line
 
 -- Parses request body
 parseRequestBody :: B.ByteString -> [(B.ByteString, B.ByteString)]
@@ -45,21 +43,21 @@
     map sep items
     where
     sep   = breakBS "="
-    items = C.split '&' body
+    items = B.split '&' body
 
 -- Gets all request lines
 getRequest :: Socket -> IO ([B.ByteString], B.ByteString)
 getRequest client = do
     content <- recv client 1024
     let (headers, body) = breakBS "\r\n\r\n" content
-    return (C.lines headers, body)
+    return (B.lines headers, body)
 
 -- Parses requests
 parseRequest :: ([B.ByteString], B.ByteString) -> HTTPRequest
 parseRequest reqlines =
     HTTPRequest { method=met, uri=ur, httpver=ver, headers=heads, body=body }
     where
-    [met, ur, ver] = C.words $ head headers -- First line is METHOD URI VERSION
+    [met, ur, ver] = B.words $ head headers -- First line is METHOD URI VERSION
     heads   = Map.fromList $ map parseRequestLine $ tail headers
     body    = snd reqlines
     headers = fst reqlines
diff --git a/Ketchup/Routing.hs b/Ketchup/Routing.hs
--- a/Ketchup/Routing.hs
+++ b/Ketchup/Routing.hs
@@ -1,48 +1,58 @@
 {-# LANGUAGE OverloadedStrings #-}
 
 module Ketchup.Routing
-( route
+( Route      (..)
+, Parameters (..)
+, route
+, useHandler
 ) where
 
-import qualified Data.ByteString.Char8 as C
+import qualified Data.ByteString.Char8 as B
 import qualified Data.Map as M
 import           Ketchup.Httpd
 import           Ketchup.Utils
 import           Network
 import qualified Text.Regex.PCRE as R
 
+type Parameters = M.Map B.ByteString B.ByteString
+type Route = Socket -> HTTPRequest -> Parameters -> IO ()
+
 -- |Router function
 -- Takes a list of routes and iterates through them for every requeust
-route :: [(C.ByteString, (Socket -> HTTPRequest
-         -> (M.Map C.ByteString C.ByteString) -> IO ()))] -- ^ Routes
-         -> (Socket -> HTTPRequest -> IO ())
+route :: [(B.ByteString, Route)] -- ^ Routes
+         -> Handler
 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
+-- |Wrap a handler in a route
+-- Lets you use a handler (no parameters) as a route
+useHandler :: Handler -> Route
+useHandler handler hnd req params = handler hnd req
+
+match :: B.ByteString -> B.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
+        | or [B.null y, B.null x] = False
+        | B.head y == ':'         = True
         | x R.=~ y                = True
         | otherwise               = False
-    urlparts = C.split '/' url
-    tmpparts = C.split '/' template
+    urlparts = B.split '/' url
+    tmpparts = B.split '/' template
 
-params :: C.ByteString -> C.ByteString -> M.Map C.ByteString C.ByteString
+params :: B.ByteString -> B.ByteString -> Parameters
 params url template =
-    M.fromList $ filter (not . C.null . fst) $
+    M.fromList $ filter (not . B.null . fst) $
         zipWith retrieve urlparts tmpparts
     where
     retrieve x y
-        | or [C.null y, C.null x] = ("","")
-        | C.head y == ':'         = (C.tail y, x)
+        | or [B.null y, B.null x] = ("","")
+        | B.head y == ':'         = (B.tail y, x)
         | otherwise               = ("","")
-    urlparts = C.split '/' url
-    tmpparts = C.split '/' template
+    urlparts = B.split '/' url
+    tmpparts = B.split '/' template
diff --git a/Ketchup/Static.hs b/Ketchup/Static.hs
--- a/Ketchup/Static.hs
+++ b/Ketchup/Static.hs
@@ -5,19 +5,17 @@
 ) where
 
 import qualified Data.ByteString.Char8 as B
-import qualified Data.Map as M
 import           Data.Text.Encoding
 import           Ketchup.Httpd
 import           Ketchup.Utils
-import           Network
 import           Network.Mime
 import           System.Directory (doesFileExist)
 
 -- |Static file handler
 -- Takes a directory and returns a route
 static :: B.ByteString -- ^ Path to serve static files from
-          -> Socket -> HTTPRequest -> (M.Map B.ByteString B.ByteString) -> IO ()
-static folder hnd req params = do
+          -> Handler
+static folder hnd req = do
     let path = B.concat [folder, uri req]
     let sane = sanecheck path
     let strPath = B.unpack path
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,7 +1,6 @@
 # Howdy, this is Ketchup!
 
-Ketchup is a very small HTTP server implementation, the HTTPd itself is one file with
-around 100 LoC!
+Ketchup is a very small HTTP server implementation, currently [under 300 LoC total](http://ix.io/cQM)!
 
 Ketchup is also made to be as modular and embeddable as possible, if you want a cabal-free Haskell app, just take those two/three files you need and put it in your project!
 
diff --git a/example.hs b/example.hs
--- a/example.hs
+++ b/example.hs
@@ -34,11 +34,11 @@
     print $ parseBody $ body req
     sendReply hnd 200 [("Content-Type", ["text/html"])] "OK!"
 
-router = route [ ("/"            , handle     )
-               , ("/greet/:user" , greet      )
-               , ("/chunk"       , chunked    )
-               , ("/Ketchup/(.*)", static "." )
-               , ("/post"        , post       )
+router = route [ ("/"            , handle  )
+               , ("/greet/:user" , greet   )
+               , ("/chunk"       , chunked )
+               , ("/post"        , post    )
+               , ("/Ketchup/(.*)", useHandler $ static "." )
                ]
 
 main = do listenHTTP "*" 8080 router
diff --git a/gendocs.sh b/gendocs.sh
new file mode 100644
--- /dev/null
+++ b/gendocs.sh
@@ -0,0 +1,2 @@
+mkdir docs
+haddock --html --hoogle -U -o docs Ketchup/Chunked.hs Ketchup/Httpd.hs Ketchup/Routing.hs Ketchup/Static.hs Ketchup/Utils.hs
