diff --git a/pointless-lenses.cabal b/pointless-lenses.cabal
--- a/pointless-lenses.cabal
+++ b/pointless-lenses.cabal
@@ -1,5 +1,5 @@
 Name:            pointless-lenses
-Version:         0.0.2
+Version:         0.0.3
 License:         BSD3
 License-file:    LICENSE
 Author:          Alcino Cunha <alcino@di.uminho.pt>, Hugo Pacheco <hpacheco@di.uminho.pt>
@@ -23,9 +23,10 @@
   Hs-Source-Dirs: src
   Build-Depends:        base >= 3 && < 5, pointless-haskell >= 0.0.2, haskell98, process
   exposed-modules:
-        Generics.Pointless.Lenses.Combinators
+        Generics.Pointless.Lenses.Combinators,
         Generics.Pointless.Lenses.RecursionPatterns,
-        Generics.Pointless.Lenses.Reader.RecursionPatterns
-        Generics.Pointless.Lenses.Examples.Examples
+        Generics.Pointless.Lenses.Reader.RecursionPatterns,
+        Generics.Pointless.Lenses.Examples.Examples,
+        Generics.Pointless.Lenses
 
   extensions: ScopedTypeVariables, FlexibleContexts, Rank2Types, TypeOperators, TypeFamilies
diff --git a/src/Generics/Pointless/Lenses.hs b/src/Generics/Pointless/Lenses.hs
new file mode 100644
--- /dev/null
+++ b/src/Generics/Pointless/Lenses.hs
@@ -0,0 +1,54 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Generics.Pointless.Lenses
+-- Copyright   :  (c) 2009 University of Minho
+-- License     :  BSD3
+--
+-- Maintainer  :  hpacheco@di.uminho.pt
+-- Stability   :  experimental
+-- Portability :  non-portable
+--
+-- Pointless Lenses:
+-- bidirectional lenses with point-free programming
+-- 
+-- This module defines the structure of lenses and provides Quickcheck procedures to test lens well-behavedness.
+--
+-----------------------------------------------------------------------------
+
+module Generics.Pointless.Lenses where
+    
+import Generics.Pointless.Functors
+
+-- | The data type of lenses
+data Lens c a = Lens { get :: c  -> a
+                     , put :: (a,c) -> c
+                     , create :: a -> c
+                     }
+
+-- | The type of natural lenses.
+-- Lenses that encode bidirectional natural transformations.
+type NatLens f g = forall x. x -> Lens (Rep f x) (Rep g x)
+
+-- | Increment a number.
+inc_lns :: Enum a => Lens a a
+inc_lns = Lens succ (pred . fst) pred
+
+-- | Decrement a number.
+dec_lns :: Enum a => Lens a a
+dec_lns = Lens pred (succ . fst) succ
+
+-- | QuickCheck procedure to test if a lens is well-behaved.
+wb :: (Eq a,Eq c) => Lens c a -> a -> c -> Bool
+wb l a c = putget l a c && getput l c && createget l a
+
+-- | QuickCheck procedure to test if a lens satisfies the PutGet law.
+putget :: (Eq a,Eq c) => Lens c a -> a -> c -> Bool
+putget l a c = get l (put l (a,c)) == a
+
+-- | QuickCheck procedure to test if a lens satisfies the GetPut law.
+getput :: Eq c => Lens c a -> c -> Bool
+getput l c = put l (get l c,c) == c
+
+-- | QuickCheck procedure to test if a lens satisfies the CreateGet law.
+createget :: Eq a => Lens c a -> a -> Bool
+createget l a = get l (create l a) == a
