diff --git a/AC-Vector-Fancy.cabal b/AC-Vector-Fancy.cabal
--- a/AC-Vector-Fancy.cabal
+++ b/AC-Vector-Fancy.cabal
@@ -1,6 +1,6 @@
 Cabal-Version: >= 1.6
 Name:          AC-Vector-Fancy
-Version:       2.1.0
+Version:       2.1.2
 Stability:     Experimental
 Synopsis:      Fancy type system stuff for AC-Vector
 
@@ -10,7 +10,7 @@
   (Requires several language extensions, including
   type families.)
 
-  Now includes bounding box classes.
+  Now includes @points_bounds@ method.
 
 Category:      Data, Math, Numerical, Graphics
 License:       BSD3
@@ -26,5 +26,5 @@
     Data.Vector.Fancy,
     Data.Vector.Transform.Fancy,
     Data.BoundingBox
-  Build-Depends:   base >= 4 && < 5, AC-Angle >= 1.0, AC-Vector >= 2.1
+  Build-Depends:   base >= 4 && < 5, AC-Angle >= 1.0, AC-Vector >= 2.1.1
   HS-Source-Dirs:  .
diff --git a/Data/BoundingBox.hs b/Data/BoundingBox.hs
--- a/Data/BoundingBox.hs
+++ b/Data/BoundingBox.hs
@@ -6,8 +6,8 @@
 
 module Data.BoundingBox
     (
-      -- * Class
-      BoundingBox (..),
+      -- * Classes
+      BoundingBox (..), HasBBox (..),
 
       -- * Types
 
@@ -40,6 +40,9 @@
   -- | Given two corner points, construct a bounding box containing them both. (You can use any two points, given in any order, provided that they are from /opposite/ corners.)
   bounds :: Point b -> Point b -> b
 
+  -- | Given a list of points, construct a bounding box containing them all. (Throws an exception if the list is empty.)
+  points_bounds :: [Point b] -> b
+
   -- | Return a point containing the minimum values for all coordinates.
   min_bound :: b -> Point b
 
@@ -58,6 +61,7 @@
 instance BoundingBox R.Range where
   type Point R.Range = Scalar
   bounds        = R.bounds
+  points_bounds = R.points_bounds
   min_bound     = R.min_bound
   max_bound     = R.max_bound
   within_bounds = R.within_bounds
@@ -67,6 +71,7 @@
 instance BoundingBox B1.BBox1 where
   type Point B1.BBox1 = Vector1
   bounds        = B1.bounds
+  points_bounds = B1.points_bounds
   min_bound     = B1.min_bound
   max_bound     = B1.max_bound
   within_bounds = B1.within_bounds
@@ -76,6 +81,7 @@
 instance BoundingBox B2.BBox2 where
   type Point B2.BBox2 = Vector2
   bounds        = B2.bounds
+  points_bounds = B2.points_bounds
   min_bound     = B2.min_bound
   max_bound     = B2.max_bound
   within_bounds = B2.within_bounds
@@ -85,6 +91,7 @@
 instance BoundingBox B3.BBox3 where
   type Point B3.BBox3 = Vector3
   bounds        = B3.bounds
+  points_bounds = B3.points_bounds
   min_bound     = B3.min_bound
   max_bound     = B3.max_bound
   within_bounds = B3.within_bounds
@@ -94,8 +101,18 @@
 instance BoundingBox B4.BBox4 where
   type Point B4.BBox4 = Vector4
   bounds        = B4.bounds
+  points_bounds = B4.points_bounds
   min_bound     = B4.min_bound
   max_bound     = B4.max_bound
   within_bounds = B4.within_bounds
   union         = B4.union
   isect         = B4.isect
+
+
+-- | Class representing things that possess a bounding box.
+class HasBBox x where
+  -- | The type of bounding box. (Varies depending in the required number of dimensions.)
+  type BBox x :: *
+
+  -- | Get an object's bounding box.
+  get_bbox :: x -> BBox x
