diff --git a/example/conversion.cpp b/example/conversion.cpp
new file mode 100644
index 0000000..0299dfd
--- /dev/null
+++ b/example/conversion.cpp
@@ -0,0 +1,124 @@
+// 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 conversion.cpp
+
+\details
+Test explicit and implicit unit conversion.
+
+Output:
+@verbatim
+
+//[conversion_output_1
+L1 = 2 m
+L2 = 2 m
+L3 = 2 m
+L4 = 200 cm
+L5 = 5 m
+L6 = 4 m
+L7 = 200 cm
+//]
+
+//[conversion_output_2
+volume (m^3)  = 1 m^3
+volume (cm^3) = 1e+06 cm^3
+volume (m^3)  = 1 m^3
+
+energy (joules) = 1 J
+energy (ergs)   = 1e+07 erg
+energy (joules) = 1 J
+
+velocity (2 m/s)  = 2 m s^-1
+velocity (2 cm/s) = 0.02 m s^-1
+//]
+
+@endverbatim
+**/
+
+#include <iostream>
+
+#include <boost/units/io.hpp>
+#include <boost/units/pow.hpp>
+#include <boost/units/systems/cgs.hpp>
+#include <boost/units/systems/cgs/io.hpp>
+#include <boost/units/systems/si.hpp>
+#include <boost/units/systems/si/io.hpp>
+
+using namespace boost::units;
+
+int main()
+{
+    // test quantity_cast
+    {
+    // implicit value_type conversions
+    //[conversion_snippet_1
+    quantity<si::length>     L1 = quantity<si::length,int>(int(2.5)*si::meters);
+    quantity<si::length,int> L2(quantity<si::length,double>(2.5*si::meters));
+    //]
+    
+    //[conversion_snippet_3
+    quantity<si::length,int> L3 = static_cast<quantity<si::length,int> >(L1);
+    //]
+    
+    //[conversion_snippet_4
+    quantity<cgs::length>    L4 = static_cast<quantity<cgs::length> >(L1);
+    //]
+    
+    quantity<si::length,int> L5(4*si::meters),
+                             L6(5*si::meters);
+    quantity<cgs::length>    L7(L1);
+    
+    swap(L5,L6);
+    
+    std::cout << "L1 = " << L1 << std::endl
+              << "L2 = " << L2 << std::endl
+              << "L3 = " << L3 << std::endl
+              << "L4 = " << L4 << std::endl
+              << "L5 = " << L5 << std::endl
+              << "L6 = " << L6 << std::endl
+              << "L7 = " << L7 << std::endl
+              << std::endl;
+    }
+    
+    // test explicit unit system conversion
+    {
+    //[conversion_snippet_5
+    quantity<si::volume>    vs(1.0*pow<3>(si::meter));      
+    quantity<cgs::volume>   vc(vs);
+    quantity<si::volume>    vs2(vc);
+                        
+    quantity<si::energy>    es(1.0*si::joule);      
+    quantity<cgs::energy>   ec(es);
+    quantity<si::energy>    es2(ec);
+                        
+    quantity<si::velocity>  v1 = 2.0*si::meters/si::second,     
+                            v2(2.0*cgs::centimeters/cgs::second);
+    //]
+    
+    std::cout << "volume (m^3)  = " << vs << std::endl
+              << "volume (cm^3) = " << vc << std::endl
+              << "volume (m^3)  = " << vs2 << std::endl
+              << std::endl;
+            
+    std::cout << "energy (joules) = " << es << std::endl
+              << "energy (ergs)   = " << ec << std::endl
+              << "energy (joules) = " << es2 << std::endl
+              << std::endl;
+            
+    std::cout << "velocity (2 m/s)  = " << v1 << std::endl
+              << "velocity (2 cm/s) = " << v2 << std::endl
+              << std::endl;
+    }
+
+    return 0;
+}
