diff --git a/example/quantity.cpp b/example/quantity.cpp
new file mode 100644
index 0000000..e3d3f18
--- /dev/null
+++ b/example/quantity.cpp
@@ -0,0 +1,128 @@
+// Boost.Units - A C++ library for zero-overhead dimensional analysis and 
+// unit/quantity manipulation and conversion
+//
+// Copyright (C) 2003-2008 Matthias Christian Schabel
+// Copyright (C) 2008 Steven Watanabe
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+/** 
+\file
+    
+\brief quantity.cpp
+
+\details
+Test quantity algebra.
+
+Output:
+@verbatim
+
+//[quantity_output_double
+L                                 = 2 m
+L+L                               = 4 m
+L-L                               = 0 m
+L*L                               = 4 m^2
+L/L                               = 1 dimensionless 
+L*meter                           = 2 m^2
+kilograms*(L/seconds)*(L/seconds) = 4 m^2 kg s^-2
+kilograms*(L/seconds)^2           = 4 m^2 kg s^-2
+L^3                               = 8 m^3
+L^(3/2)                           = 2.82843 m^(3/2)
+2vL                               = 1.41421 m^(1/2)
+(3/2)vL                           = 1.5874 m^(2/3)
+//]
+
+//[quantity_output_complex
+L                                 = (3,4) m
+L+L                               = (6,8) m
+L-L                               = (0,0) m
+L*L                               = (-7,24) m^2
+L/L                               = (1,0) dimensionless 
+L*meter                           = (3,4) m^2
+kilograms*(L/seconds)*(L/seconds) = (-7,24) m^2 kg s^-2
+kilograms*(L/seconds)^2           = (-7,24) m^2 kg s^-2
+L^3                               = (-117,44) m^3
+L^(3/2)                           = (2,11) m^(3/2)
+2vL                               = (2,1) m^(1/2)
+(3/2)vL                           = (2.38285,1.69466) m^(2/3)
+//]
+
+@endverbatim
+**/
+
+#include <complex>
+#include <iostream>
+
+#include <boost/mpl/list.hpp>
+
+#include <boost/typeof/std/complex.hpp>
+
+#include <boost/units/pow.hpp>
+#include <boost/units/quantity.hpp>
+#include <boost/units/io.hpp>
+
+#include "test_system.hpp"
+
+int main(void)
+{
+    using namespace boost::units;
+    using namespace boost::units::test;
+
+    {
+    //[quantity_snippet_1
+    quantity<length> L = 2.0*meters;                     // quantity of length
+    quantity<energy> E = kilograms*pow<2>(L/seconds);    // quantity of energy
+    //]
+    
+    std::cout << "L                                 = " << L << std::endl
+              << "L+L                               = " << L+L << std::endl
+              << "L-L                               = " << L-L << std::endl
+              << "L*L                               = " << L*L << std::endl
+              << "L/L                               = " << L/L << std::endl
+              << "L*meter                           = " << L*meter << std::endl
+              << "kilograms*(L/seconds)*(L/seconds) = "
+              << kilograms*(L/seconds)*(L/seconds) << std::endl
+              << "kilograms*(L/seconds)^2           = "
+              << kilograms*pow<2>(L/seconds) << std::endl
+              << "L^3                               = "
+              << pow<3>(L) << std::endl
+              << "L^(3/2)                           = "
+              << pow<static_rational<3,2> >(L) << std::endl
+              << "2vL                               = "
+              << root<2>(L) << std::endl
+              << "(3/2)vL                           = "
+              << root<static_rational<3,2> >(L) << std::endl
+              << std::endl;
+    }
+    
+    {
+    //[quantity_snippet_2
+    quantity<length,std::complex<double> > L(std::complex<double>(3.0,4.0)*meters);
+    quantity<energy,std::complex<double> > E(kilograms*pow<2>(L/seconds));
+    //]
+    
+    std::cout << "L                                 = " << L << std::endl
+              << "L+L                               = " << L+L << std::endl
+              << "L-L                               = " << L-L << std::endl
+              << "L*L                               = " << L*L << std::endl
+              << "L/L                               = " << L/L << std::endl
+              << "L*meter                           = " << L*meter << std::endl
+              << "kilograms*(L/seconds)*(L/seconds) = "
+              << kilograms*(L/seconds)*(L/seconds) << std::endl
+              << "kilograms*(L/seconds)^2           = "
+              << kilograms*pow<2>(L/seconds) << std::endl
+              << "L^3                               = "
+              << pow<3>(L) << std::endl
+              << "L^(3/2)                           = "
+              << pow<static_rational<3,2> >(L) << std::endl
+              << "2vL                               = "
+              << root<2>(L) << std::endl
+              << "(3/2)vL                           = "
+              << root<static_rational<3,2> >(L) << std::endl
+              << std::endl;
+    }
+
+    return 0;
+}
