diff --git a/Data/AppSettings.hs b/Data/AppSettings.hs
--- a/Data/AppSettings.hs
+++ b/Data/AppSettings.hs
@@ -106,7 +106,7 @@
 --
 -- @
 -- getSetting \<setting\>
--- setSetting \<setting\> \<value\>
+-- setSetting \<conf\> \<setting\> \<value\>
 -- @
 --
 -- and so on.
@@ -134,7 +134,7 @@
 setting :: (Show a) => Setting a -> State Conf ()
 setting (Setting nameV defaultV) = do
 	soFar <- get
-	put $ M.insert nameV (SettingInfo { value = show defaultV, userSet = False }) soFar
+	put $ M.insert nameV SettingInfo { value = show defaultV, userSet = False } soFar
 
 -- | Used in combination with 'setting' to register settings.
 -- Registering settings is optional, see 'DefaultConfig'.
@@ -146,8 +146,7 @@
 --     setting \<setting2\>
 -- @
 getDefaultConfig :: State Conf () -> DefaultConfig
-getDefaultConfig actions = do
-	DefaultConfig $ execState actions M.empty
+getDefaultConfig actions = DefaultConfig $ execState actions M.empty
 
 -- | Where to look for or store the configuration file.
 data FileLocation = AutoFromAppName String
@@ -179,6 +178,9 @@
 -- option simply by giving that option (without that callback
 -- you'd have to call getSetting settings \<setting\>, so
 -- the callback lets you save a parameter).
+-- There is no such shortcut for 'setSetting' though, as it's
+-- normally used less often and in other contexts, it is probably
+-- OK to have that extra parameter for the setSetting.
 --
 -- Example of use:
 --
@@ -204,7 +206,7 @@
 saveSettings :: DefaultConfig -> FileLocation -> Conf -> IO ()
 saveSettings (DefaultConfig defaults) location conf = do
 	filePath <- getPathForLocation location
-	writeConfigFile filePath (M.union conf defaults)
+	writeConfigFile filePath (conf `M.union` defaults)
 
 -- TODO maybe another getSetting that'll tell you
 -- if the setting is invalid in the config file instead of silently
@@ -220,7 +222,7 @@
 -- | Change the value of a setting. You'll have to call
 -- 'saveSettings' so that the change is written to disk.
 setSetting :: (Show a) => Conf -> Setting a -> a -> Conf
-setSetting conf (Setting key _) v = M.insert key (SettingInfo { value = show v, userSet=True }) conf
+setSetting conf (Setting key _) v = M.insert key SettingInfo { value = show v, userSet=True } conf
 
 getSettingsFolder :: String -> IO FilePath
 getSettingsFolder appName = do
diff --git a/app-settings.cabal b/app-settings.cabal
--- a/app-settings.cabal
+++ b/app-settings.cabal
@@ -2,9 +2,74 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                app-settings
-version:             0.1.0.0
+version:             0.1.0.1
 synopsis:            A library to manage application settings (INI file-like)
--- description:         
+description:         
+  A library to deal with application settings.
+  This library deals with read-write application settings.
+  You will have to specify the settings that your application
+  uses, their name, types and default values.
+  Setting types must implement the 'Read' and 'Show' typeclasses. 
+ 
+  The settings are saved in a file in an INI-like key-value format
+  (without sections).
+ 
+  Reading and updating settings is done in pure code, the IO
+  monad is only used to load settings and save them to disk.
+  It is advised for the user to create a module in your project
+  holding settings handling.
+ 
+  You can then declare settings:
+ 
+  > fontSize :: Setting Double
+  > fontSize = Setting "fontSize" 14
+  > 
+  > dateFormat :: Setting String
+  > dateFormat = Setting "dateFormat" "%x"
+  > 
+  > backgroundColor :: Setting (Int, Int, Int)
+  > backgroundColor = Setting "backcolor" (255, 0, 0)
+ 
+  Optionally you can declare the list of all your settings:
+ 
+  > defaultConfig :: DefaultConfig
+  > defaultConfig = getDefaultConfig $ do
+  >     setting fontSize
+  >     setting dateFormat
+  >     setting backgroundColor
+ 
+  If you do it, 'saveSettings' will also save settings
+  which have not been modified, which are still at their
+  default value in the configuration file, in a commented
+  form, as a documentation to the user who may open the
+  configuration file.
+  So for instance if you declare this default configuration
+  and have set the font size to 16 but left the other
+  settings untouched, the configuration file which will be
+  saved will be:
+ 
+  > fontSize=16
+  > # dateFormat="%x"
+  > # backcolor=(255,0,0)
+ 
+  If you did not specify the list of settings, only the
+  first line would be present in the configuration file.
+ 
+  Once we declared the settings, we can read the configuration
+  from disk (and your settings module should export your wrapper
+  around the function offered by this library):
+ 
+  > readResult <- try $ readSettings (AutoFromAppName "test")
+  > case readResult of
+  > 	Right (conf, GetSetting getSetting) -> do
+  > 		let textSize = getSetting textSizeFromWidth
+  > 		saveSettings getDefaultConfig (AutoFromAppName "test") conf
+  > 	Left (x :: SomeException) -> error "Error reading the config file!"
+ 
+  'AutoFromAppName' specifies where to save the configuration file.
+  And we've already covered the getSetting in this snippet, see 
+  the 'readSettings' documentation for further information.
+
 homepage:            https://github.com/emmanueltouzery/app-settings
 license:             BSD3
 license-file:        LICENSE
diff --git a/tests/Tests.hs b/tests/Tests.hs
--- a/tests/Tests.hs
+++ b/tests/Tests.hs
@@ -113,8 +113,8 @@
 		Right (conf, _) -> do
 			copyFile "tests/partial.config" "p.config"
 			saveSettings defaultConfig (Path "p.config") conf
-			doesFileExist "p.config.bak" >>= (flip shouldBe) True
-			doesFileExist "p.config" >>= (flip shouldBe) True
+			doesFileExist "p.config.bak" >>= flip shouldBe True
+			doesFileExist "p.config" >>= flip shouldBe True
 			removeFile "p.config"
 			removeFile "p.config.bak"
 		Left (x :: SomeException) -> assertBool (show x) False
