diff --git a/src/area3d.m b/src/area3d.m
index c9b4d610614f466e0dc541026cb9bf93ec4d75db..b47b52d9e7cf91b781d68a7eeba94ebf5d52dd40 100644
--- a/src/area3d.m
+++ b/src/area3d.m
@@ -3,15 +3,11 @@ function [ area, uncorr_area ] = area3d( o )
     
     %% Deprojected 3D version.
     
-    p = o.boundary;
+     % Put all vertex coordinates with respect to center.
+    p = centered_points( o );
 
     n_vertices = size( p, 1 );
 
-    % Put all vertex coordinates with respect to center.
-    center = mean( p );
-    center = repmat( center, [ n_vertices, 1 ] );
-    p = p - center;
-    
     % Build small triangles.
     index = [ 2 : n_vertices 1 ];
     p1 = p;
diff --git a/src/centered_points.m b/src/centered_points.m
new file mode 100644
index 0000000000000000000000000000000000000000..29f7cbb4f38b34478203ebdac208766e1c5302c8
--- /dev/null
+++ b/src/centered_points.m
@@ -0,0 +1,12 @@
+function p = centered_points( o )
+%CENTERED_POINTS Returns the 3D coordinates of the object bounds, with
+%respect to its center.
+
+    p = o.boundary;
+    n_vertices = size( p ,1 );
+    center = mean( p );
+    center = repmat( center, [ n_vertices, 1 ] );
+    p = p - center;
+
+end
+