diff --git a/Geom2d/Shape/Internal.hs b/Geom2d/Shape/Internal.hs
--- a/Geom2d/Shape/Internal.hs
+++ b/Geom2d/Shape/Internal.hs
@@ -14,6 +14,8 @@
     , rectangleInt
     , Shape (..)
     , Spatial (..)
+    , Box (..)
+    , spatialBox
     )
 
        where
@@ -223,10 +225,18 @@
 instance ( Ord a, Distance p p, Eq (p a)
          , Num (p a), Point p, RealFloat a) =>
          Intersect (Shape p a) (Shape p a) where
-  intersect (ShapeCircle c) (ShapePolygon p) = c `intersect` p
-  intersect (ShapePolygon p) (ShapeCircle c) = c `intersect` p
-  intersect (ShapeCircle a) (ShapeCircle b) = a `intersect` b
-  intersect (ShapePolygon a) (ShapePolygon b) = a `intersect` b
+  intersect (ShapeCircle c) (ShapePolygon p)
+      | not (spatialBox c `intersect` spatialBox p) = False
+      | otherwise = c `intersect` p
+  intersect (ShapePolygon p) (ShapeCircle c)
+      | not (spatialBox c `intersect` spatialBox p) = False
+      | otherwise = c `intersect` p
+  intersect (ShapeCircle a) (ShapeCircle b)
+      | not (spatialBox a `intersect` spatialBox b) = False
+      | otherwise = a `intersect` b
+  intersect (ShapePolygon a) (ShapePolygon b)
+      | not (spatialBox a `intersect` spatialBox b) = False
+      | otherwise = a `intersect` b
 
 instance ( Floating a, Eq (p a), Num (p a), Ord a, Point p, Distance p p ) =>
          Intersect (Shape p a) (p a) where
@@ -297,3 +307,13 @@
   minY (ShapePolygon p) = minY p
   maxY (ShapeCircle c) = maxY c
   maxY (ShapePolygon p) = maxY p
+
+data Box a = Box (a,a) (a,a)
+
+instance (Ord a) => Intersect (Box a) (Box a) where
+  intersect (Box (a1x,a1y) (a2x,a2y)) (Box (b1x,b1y) (b2x,b2y)) =
+    max a1x b1x <= min a2x b2x && max a1y b1y <= min a2y b2y
+
+spatialBox :: (Floating a, Ord a, Spatial s) => s a -> Box a
+spatialBox o = Box (minX o, minY o) (maxX o, maxY o)
+
diff --git a/geom2d.cabal b/geom2d.cabal
--- a/geom2d.cabal
+++ b/geom2d.cabal
@@ -1,5 +1,5 @@
 name:                geom2d
-version:             0.1.2.0
+version:             0.1.2.1
 synopsis:            package for geometry in euklidean 2d space
 description:         This package provides tools for dealing with geometric
                      objects in 2D space.
