diff --git a/fuzzytime.cabal b/fuzzytime.cabal
--- a/fuzzytime.cabal
+++ b/fuzzytime.cabal
@@ -1,5 +1,5 @@
 Name:                fuzzytime
-Version:             0.1.1
+Version:             0.2
 Description:         Print current time in a more casual way
 Synopsis:            Print current time in a more casual way
 Category:            Utils
@@ -12,4 +12,4 @@
 
 Executable fuzzytime
     Main-is:           fuzzytime.hs
-    Build-Depends:     base >= 3 && <= 4, cmdargs, old-time
+    Build-Depends:     base >= 4 && < 5, cmdargs, old-time
diff --git a/fuzzytime.hs b/fuzzytime.hs
--- a/fuzzytime.hs
+++ b/fuzzytime.hs
@@ -11,7 +11,7 @@
 ---- Prints the current time in a more casual way (the \"ten past six\"-style).
 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
-module Fuzzytime (
+module Main (
 	-- * Description
 	-- $description
 	  main
@@ -22,6 +22,7 @@
 import System.Console.CmdArgs
 import System.Time
 
+
 -- $description
 -- A small utility to print the current time in a more casual way (the \"ten past six\"-style).
 --
@@ -31,12 +32,19 @@
 --
 -- To add a new language, two things need to be done:
 --
--- (1) The new language has to be added to the instance of Show FuzzyTime. (And to the help message.)
+-- (1) The new language has to be added to the instance of Show FuzzyTime, and to the help message.
 --
 -- (2) An appropriate function has to be created to turn FuzzyTime -> String.
 
 
 -- CHANGELOG
+-- TODO
+-- 		noon, midnight
+-- 		more languages
+-- 		wrong cli options
+-- 0.2	2011.01.12
+-- 		added French and German
+-- 		added 12 vs. 24-hour clock
 -- 0.1	2010.12.05
 -- 		initial release: two languages (en and pl), 1 < precision < 60
 -- 		0.1.1	2010.12.06
@@ -55,7 +63,11 @@
 confDefaultPrec :: Int
 confDefaultPrec = 5
 
+-- | \[config] The default for 12 vs. 24-hour clock.
+confDefaultClock :: Int
+confDefaultClock = 12
 
+
 -- main =================================================================================
 
 
@@ -64,24 +76,26 @@
 main = do
 	cl <- cmdArgs clOpts
 	now <- getClockTime >>= toCalendarTime
-	print $ toFuzzyTime (prec cl) (lang cl) now
-	
+	print $ toFuzzyTime (clock cl) (lang cl) (prec cl) now
 
+
 -- cl args ==============================================================================
 
 
 -- | Two options can be set via the command line: language and precision.
 data CLOpts = CLOpts {
-	  lang :: String
-	, prec :: Int
+	  clock	:: Int
+	, lang	:: String
+	, prec	:: Int
 	} deriving (Show, Data, Typeable)
 
 clOpts = CLOpts {
-	  lang=confDefaultLang	&= help "Language (currently en and pl); default en."
-	, prec=confDefaultPrec	&= help "Precision (1 < prec < 60 [minutes]); default 5."
+	  clock	=confDefaultClock	&= help "12 or 24-hour clock; default 12-hour."
+	, lang	=confDefaultLang	&= help "Language (currently de, en, fr and pl); default en."
+	, prec	=confDefaultPrec	&= help "Precision (1 < prec < 60 [minutes]); default 5."
 	}
 	&= program "fuzzytime"
-	&= summary "Print fuzzy time, e.g. 10:52 -> ten to eleven.\nv0.1, 2010.05.12, kamil.stachowski@gmail.com, GPL3+"
+	&= summary "Print fuzzy time, e.g. 10:52 -> ten to eleven.\nv0.2, 2011.01.12, kamil.stachowski@gmail.com, GPL3+"
 
 
 -- FuzzyTime – main =====================================================================
@@ -96,30 +110,33 @@
 	} deriving (Eq)
 
 -- | This is where FuzzyTime Int Int String is turned into the time String.
+-- It is assumed that by the time these functions are called, hour will be in [0..23] and min will be in [0..59].
 instance Show FuzzyTime where
 	show (FuzzyTime hour min lang) =
 		case lang of
+			"de" -> showFuzzyTimeDe hour min
 			"en" -> showFuzzyTimeEn hour min
+			"fr" -> showFuzzyTimeFr hour min
 			"pl" -> showFuzzyTimePl hour min
 			otherwise -> "Language " ++ lang ++ " is not supported."
 
 
--- | Converts CalendarTime to FuzzyTime using the given precision. The language is set, too, for Show to know how to display it.
+-- | Converts CalendarTime to FuzzyTime using the given precision. The language is also set, so that Show knows how to display it.
 toFuzzyTime ::
-	   Int			-- ^ precision
+	   Int			-- ^ clock
 	-> String		-- ^ language
+	-> Int			-- ^ precision
 	-> CalendarTime	-- ^ time
 	-> FuzzyTime
-toFuzzyTime cPrec cLang time =
-	if fuzzdM min /= 60 then
-		FuzzyTime hour (fuzzdM min) cLang
-	else
-		FuzzyTime (hour+1) 0 cLang
+toFuzzyTime cClock cLang cPrec time = FuzzyTime hour (fuzzdM min) cLang
 	where
 	min :: Int
 	min = (ctMin time)
 	hour :: Int
-	hour = (ctHour time) `mod` 12
+	hour = if cClock==24 then
+		(ctHour time)
+		else
+		(ctHour time) `mod` 12
 	fuzzdM :: Int -> Int
 	fuzzdM m =
 		let
@@ -155,6 +172,59 @@
 	numeralEnHelper10 i = ["twenty", "thirty", "forty", "fifty"] !! (i-2)
 
 
+-- German -------------------------------------------------------------------------------
+
+
+showFuzzyTimeDe :: Int -> Int -> String
+showFuzzyTimeDe hour min
+	| min == 0	= numeralDe hour ++ " Uhr"
+	| min < 30	= numeralDe min ++ " nach " ++ numeralDe hour
+	| min == 30	= "halb " ++ numeralDe (hour+1)
+	| min > 30	= numeralDe (60-min) ++ " vor " ++ numeralDe (hour+1)
+	| otherwise	= "Oops, es sieht aus, dass es " ++ show hour ++ ":" ++ show min ++ " ist."
+
+
+numeralDe :: Int -> String
+numeralDe n
+	| n < 20			= numeralDeHelper1 n
+	| n `mod` 10 == 0	= numeralDeHelper10 (n `div` 10)
+	| otherwise			= numeralDeHelper1 (n `mod` 10) ++ "und" ++ numeralDeHelper10 (n `div` 10)
+	where
+	numeralDeHelper1 :: Int -> String
+	numeralDeHelper1 i = ["zwölf", "ein", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun", "zehn", "elf", "zwőlf", "dreizehn", "vierzehn", "Viertel", "sechzehn", "siebzehn", "achtzehn", "neunzehn"] !! i
+	numeralDeHelper10 :: Int -> String
+	numeralDeHelper10 i = ["zwanzig", "dreissig", "vierzig", "fünfzig"] !! (i-2)
+
+
+-- French -------------------------------------------------------------------------------
+
+
+showFuzzyTimeFr :: Int -> Int -> String
+showFuzzyTimeFr hour min
+	| min == 0	= numeralFr hour ++ hourFr hour
+	| min == 15	= numeralFr hour ++ hourFr hour ++ " et quart"
+	| min < 30	= numeralFr hour ++ hourFr hour ++ " " ++ numeralFr min
+	| min == 30	= numeralFr hour ++ hourFr hour ++ " et demie"
+	| min == 45	= numeralFr (hour+1) ++ hourFr (hour+1) ++ " moins le quart"
+	| min > 30	= numeralFr (hour+1) ++ hourFr (hour+1) ++ " moins " ++ numeralFr (60-min)
+	| otherwise	= "Oops, il semble qu’il est " ++ show hour ++ ":" ++ show min ++ "."
+	where
+	hourFr :: Int -> String
+	hourFr h = if h==1 then " heure" else " heures"
+
+
+numeralFr :: Int -> String
+numeralFr n
+	| n < 20			= numeralFrHelper1 n
+	| n `mod` 10 == 0	= numeralFrHelper10 (n `div` 10)
+	| otherwise			= numeralFrHelper10 (n `div` 10) ++ "-" ++ numeralFrHelper1 (n `mod` 10)
+	where
+	numeralFrHelper1 :: Int -> String
+	numeralFrHelper1 i = ["douze", "une", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize", "dix-sept", "dix-huit", "dix-neuf"] !! i
+	numeralFrHelper10 :: Int -> String
+	numeralFrHelper10 i = ["vingt", "trente", "quarante", "cinquante"] !! (i-2)
+
+
 -- Polish ------------------------------------------------------------------------------
 
 
@@ -169,17 +239,27 @@
 
 numeralPlCard :: Int -> String
 numeralPlCard n
-	| n < 20			= numeralPlHelper1 n
-	| n `mod` 10 == 0	= numeralPlHelper10 (n `div` 10)
-	| otherwise			= numeralPlHelper10 (n `div` 10) ++ " " ++ numeralPlHelper1 (n `mod` 10)
+	| n < 20			= numeralPlCardHelper1 n
+	| n `mod` 10 == 0	= numeralPlCardHelper10 (n `div` 10)
+	| otherwise			= numeralPlCardHelper10 (n `div` 10) ++ " " ++ numeralPlCardHelper1 (n `mod` 10)
 	where
-	numeralPlHelper1 :: Int -> String
-	numeralPlHelper1 i = ["jeden", "dwa", "trzy", "cztery", "pięć", "sześć", "siedem", "osiem", "dziewięć", "dziesięć", "jedenaście", "dwanaście", "trzynaście", "czternaście", "kwadrans", "szesnaście", "siedemnaście", "osiemnaście", "dziewiętnaście"] !! (i-1)
-	numeralPlHelper10 :: Int -> String
-	numeralPlHelper10 i = ["dwadzieścia", "trzydzieści", "czterdzieści", "pięćdziesiąt"] !! (i-2)
+	numeralPlCardHelper1 :: Int -> String
+	numeralPlCardHelper1 i = ["jeden", "dwa", "trzy", "cztery", "pięć", "sześć", "siedem", "osiem", "dziewięć", "dziesięć", "jedenaście", "dwanaście", "trzynaście", "czternaście", "kwadrans", "szesnaście", "siedemnaście", "osiemnaście", "dziewiętnaście"] !! (i-1)
+	numeralPlCardHelper10 :: Int -> String
+	numeralPlCardHelper10 i = ["dwadzieścia", "trzydzieści", "czterdzieści", "pięćdziesiąt"] !! (i-2)
 
 numeralPlOrdNom :: Int -> String
-numeralPlOrdNom n = ["pierwsza", "druga", "trzecia", "czwarta", "piąta", "szósta", "siódma", "ósma", "dziewiąta", "dziesiąta", "jedenasta", "dwunasta"] !! (n-1)
+numeralPlOrdNom n
+	| n <= 20			= numeralPlOrdNomHelper1 n
+	| otherwise			= "dwudziesta " ++ numeralPlOrdNomHelper1 (n `mod` 10)
+	where
+	numeralPlOrdNomHelper1 :: Int -> String
+	numeralPlOrdNomHelper1 n = ["dwunasta", "pierwsza", "druga", "trzecia", "czwarta", "piąta", "szósta", "siódma", "ósma", "dziewiąta", "dziesiąta", "jedenasta", "dwunasta", "trzynasta", "czternasta", "piętnasta", "szesnasta", "siedemnasta", "osiemnasta", "dziewiętnasta", "dwudziesta"] !! n
 
 numeralPlOrdPraep :: Int -> String
-numeralPlOrdPraep n = ["dwunastej","pierwszej", "drugiej", "trzeciej", "czwartej", "piątej", "szóstej", "siódmej", "ósmej", "dziewiątej", "dziesiątej", "jedenastej", "dwunastej"] !! n
+numeralPlOrdPraep n
+	| n <= 20			= numeralPlOrdPraepHelper1 n
+	| otherwise			= "dwudziestej " ++ numeralPlOrdPraepHelper1 (n `mod` 10)
+	where
+	numeralPlOrdPraepHelper1 :: Int -> String
+	numeralPlOrdPraepHelper1 n = ["dwunastej","pierwszej", "drugiej", "trzeciej", "czwartej", "piątej", "szóstej", "siódmej", "ósmej", "dziewiątej", "dziesiątej", "jedenastej", "dwunastej", "trzynastej", "czternastej", "piętnastej", "szesnastej", "siedemnastej", "osiemnastej", "dziewiętnastej", "dwudziestej"] !! n
