diff --git a/data-interval.cabal b/data-interval.cabal
--- a/data-interval.cabal
+++ b/data-interval.cabal
@@ -1,5 +1,5 @@
 Name:		data-interval
-Version:	0.1.0
+Version:	0.2.0
 License:	BSD3
 License-File:	COPYING
 Author:		Masahiro Sakai (masahiro.sakai@gmail.com)
@@ -23,10 +23,9 @@
   location: git://github.com/msakai/data-interval.git
 
 Library
-  Exposed: False
   Hs-source-dirs: src
   Build-Depends:
-     base >=4 && <5, lattices >=1.2.1.1
+     base >=4 && <5, lattices >=1.2.1.1, deepseq
   Extensions:
      ScopedTypeVariables
      FlexibleInstances
diff --git a/src/Data/Interval.hs b/src/Data/Interval.hs
--- a/src/Data/Interval.hs
+++ b/src/Data/Interval.hs
@@ -57,6 +57,7 @@
   ) where
 
 import Algebra.Lattice
+import Control.DeepSeq
 import Control.Exception (assert)
 import Control.Monad hiding (join)
 import Data.List hiding (null)
@@ -85,11 +86,14 @@
 upperBound' :: Num r => Interval r -> (EndPoint r, Bool)
 upperBound' (Interval _ ub) = ub
 
+instance NFData r => NFData (Interval r) where
+  rnf (Interval lb ub) = rnf lb `seq` rnf ub
+
 instance (Num r, Ord r) => JoinSemiLattice (Interval r) where
   join = hull
 
 instance (Num r, Ord r) => MeetSemiLattice (Interval r) where
-  meet = hull
+  meet = intersection
 
 instance (Num r, Ord r) => Lattice (Interval r)
 
@@ -426,6 +430,10 @@
   fmap f NegInf = NegInf
   fmap f (Finite x) = Finite (f x)
   fmap f PosInf = PosInf
+
+instance NFData r => NFData (EndPoint r) where
+  rnf (Finite x) = rnf x
+  rnf _ = ()
 
 isFinite :: EndPoint r -> Bool
 isFinite (Finite _) = True
