diff --git a/Database/Groundhog.hs b/Database/Groundhog.hs
--- a/Database/Groundhog.hs
+++ b/Database/Groundhog.hs
@@ -40,12 +40,11 @@
 --  melon <- select $ (ProductNameField ==. \"Melon\") \`orderBy\` ['Desc' QuantityField]
 --  liftIO $ putStrLn $ \"Melon orders: \" ++ show melon
 -- @
-module Database.Groundhog (module G) where
-
-import Database.Groundhog.Core as G
-  ( PersistBackend(..)
+module Database.Groundhog (
+  -- * Main definitions
+    PersistBackend(..)
   , DbPersist(..)
-  , Key(..)
+  , Key
   , Unique
   , BackendSpecific
   , extractUnique
@@ -56,16 +55,23 @@
   , (~>)
   , limitTo
   , offsetBy
-  , orderBy)
-import Database.Groundhog.Expression as G
-import Database.Groundhog.Generic as G
-  ( createMigration
+  , orderBy
+  -- * Expressions
+  , (=.)
+  , (&&.), (||.)
+  , (==.), (/=.), (<.), (<=.), (>.), (>=.)
+  -- * Migration
+  , createMigration
   , executeMigration
   , executeMigrationUnsafe
   , runMigration
   , runMigrationUnsafe
   , printMigration
   , silentMigrationLogger
-  , defaultMigrationLogger)
+  , defaultMigrationLogger
+) where
 
-import Database.Groundhog.Instances as G
+import Database.Groundhog.Core
+import Database.Groundhog.Expression
+import Database.Groundhog.Generic
+import Database.Groundhog.Instances
diff --git a/Database/Groundhog/Core.hs b/Database/Groundhog/Core.hs
--- a/Database/Groundhog/Core.hs
+++ b/Database/Groundhog/Core.hs
@@ -192,6 +192,7 @@
   , orderOptions  :: [Order db r]
   }
 
+-- | This class helps to check that limit, offset, or order clauses are added to condition only once.
 class HasSelectOptions a db r | a -> db r where
   type HasLimit a
   type HasOffset a
@@ -250,7 +251,7 @@
   backendName :: Proxy db -> String
 
 class (Monad m, DbDescriptor (PhantomDb m)) => PersistBackend m where
-  -- | A token which defines the DB type. For example, different monads working with Sqlite, return Sqlite type.
+  -- | A token which defines the DB type. For example, different monads working with Sqlite, return may Sqlite type.
   type PhantomDb m
   -- | Insert a new record to a database and return its autogenerated key or ()
   insert        :: PersistEntity v => v -> m (AutoKey v)
@@ -264,7 +265,7 @@
   insertByAll   :: PersistEntity v => v -> m (Either (AutoKey v) (AutoKey v))
   -- | Replace a record with the given autogenerated key. Result is undefined if the record does not exist.
   replace       :: (PersistEntity v, PrimitivePersistField (Key v BackendSpecific)) => Key v BackendSpecific -> v -> m ()
-  -- | Return a list of the records satisfying the condition
+  -- | Return a list of the records satisfying the condition. Example: @select $ (FirstField ==. \"abc\" &&. SecondField >. \"def\") \`orderBy\` [Asc ThirdField] \`limitBy\` 100@
   select        :: (PersistEntity v, Constructor c, HasSelectOptions opts (PhantomDb m) (RestrictionHolder v c))
                 => opts -> m [v]
   -- | Return a list of all records. Order is undefined. It is useful for datatypes with multiple constructors.
@@ -273,7 +274,7 @@
   get           :: (PersistEntity v, PrimitivePersistField (Key v BackendSpecific)) => Key v BackendSpecific -> m (Maybe v)
   -- | Fetch an entity from a database by its unique key
   getBy         :: (PersistEntity v, IsUniqueKey (Key v (Unique u))) => Key v (Unique u) -> m (Maybe v)
-  -- | Update the records satisfying the condition
+  -- | Update the records satisfying the condition. Example: @update [FirstField =. \"abc\"] $ FirstField ==. \"def\"@
   update        :: (PersistEntity v, Constructor c) => [Update (PhantomDb m) (RestrictionHolder v c)] -> Cond (PhantomDb m) (RestrictionHolder v c) -> m ()
   -- | Remove the records satisfying the condition
   delete        :: (PersistEntity v, Constructor c) => Cond (PhantomDb m) (RestrictionHolder v c) -> m ()
@@ -283,7 +284,7 @@
   count         :: (PersistEntity v, Constructor c) => Cond (PhantomDb m) (RestrictionHolder v c) -> m Int
   -- | Count total number of records with all constructors
   countAll      :: PersistEntity v => v -> m Int
-  -- | Fetch projection of some fields
+  -- | Fetch projection of some fields. Example: @project (SecondField, ThirdField) $ (FirstField ==. \"abc\" &&. SecondField >. \"def\") \`orderBy\` [Asc ThirdField] \`offsetBy\` 100@
   project       :: (PersistEntity v, Constructor c, Projection p (PhantomDb m) (RestrictionHolder v c) a', HasSelectOptions opts (PhantomDb m) (RestrictionHolder v c))
                 => p
                 -> opts
@@ -351,7 +352,9 @@
 
 class (Constructor (UniqueConstr uKey), PurePersistField uKey) => IsUniqueKey uKey where
   type UniqueConstr uKey :: (* -> *) -> *
+  -- | Creates value of unique key using the data extracted from the passed value
   extractUnique :: uKey ~ Key v u => v -> uKey
+  -- | Ordinal number of the unique constraint in the list returned by 'constrUniques'
   uniqueNum :: uKey -> Int
 
 -- | Unique name and list of the field names that form a unique combination
diff --git a/groundhog.cabal b/groundhog.cabal
--- a/groundhog.cabal
+++ b/groundhog.cabal
@@ -1,5 +1,5 @@
 name:            groundhog
-version:         0.3.0
+version:         0.3.0.1
 license:         BSD3
 license-file:    LICENSE
 author:          Boris Lykah <lykahb@gmail.com>
