$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r65766 - in branches/release: . boost boost/algorithm/string boost/archive boost/bimap boost/config boost/detail boost/filesystem boost/functional/hash boost/fusion boost/gil boost/graph boost/graph/detail boost/graph/distributed boost/integer boost/interprocess boost/intrusive boost/io boost/iostreams boost/math boost/msm boost/numeric/ublas boost/pending boost/program_options boost/property_tree boost/python boost/range boost/regex boost/serialization boost/signals boost/signals2 boost/spirit boost/spirit/home boost/spirit/home/karma boost/spirit/home/support boost/statechart boost/system boost/thread boost/tr1 boost/type_traits boost/unordered boost/utility boost/uuid boost/variant boost/wave doc libs libs/algorithm/string libs/array/doc libs/array/test libs/bimap libs/config libs/filesystem libs/functional/hash libs/fusion libs/graph/test libs/graph_parallel libs/graph_parallel/test libs/integer libs/interprocess libs/intrusive libs/iostreams libs/math libs/math/doc/sf_and_dist libs/mpi/build libs/mpl/doc/refmanual libs/mpl/doc/src/refmanual libs/msm libs/numeric/ublas libs/numeric/ublas/doc libs/program_options libs/property_tree libs/python libs/range libs/regex libs/serialization libs/serialization/doc libs/serialization/test libs/signals libs/signals2 libs/spirit libs/spirit/classic/example libs/spirit/doc libs/spirit/example libs/spirit/phoenix libs/spirit/test libs/spirit/test/qi libs/statechart libs/static_assert libs/system libs/thread libs/timer libs/tr1 libs/type_traits libs/type_traits/doc libs/unordered libs/utility libs/utility/swap/test libs/uuid libs/wave more more/getting_started status tools tools/bcp tools/boostbook tools/build/v2 tools/inspect tools/quickbook tools/regression tools/release tools/wave
From: jewillco_at_[hidden]
Date: 2010-10-05 13:42:58
Author: jewillco
Date: 2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
New Revision: 65766
URL: http://svn.boost.org/trac/boost/changeset/65766
Log:
Merged r64074, r64645, r64935, r65198, r65385, r65764 (all related to bundled graph properties as far as I remember)
Properties modified: 
   branches/release/   (props changed)
   branches/release/INSTALL   (props changed)
   branches/release/Jamroot   (props changed)
   branches/release/LICENSE_1_0.txt   (props changed)
   branches/release/boost/   (props changed)
   branches/release/boost-build.jam   (props changed)
   branches/release/boost.css   (props changed)
   branches/release/boost.png   (props changed)
   branches/release/boost/algorithm/string/   (props changed)
   branches/release/boost/archive/   (props changed)
   branches/release/boost/archive/basic_archive.hpp   (props changed)
   branches/release/boost/array.hpp   (props changed)
   branches/release/boost/bimap/   (props changed)
   branches/release/boost/config/   (props changed)
   branches/release/boost/config.hpp   (props changed)
   branches/release/boost/detail/   (props changed)
   branches/release/boost/detail/endian.hpp   (props changed)
   branches/release/boost/filesystem/   (props changed)
   branches/release/boost/filesystem.hpp   (props changed)
   branches/release/boost/functional/hash/   (props changed)
   branches/release/boost/fusion/   (props changed)
   branches/release/boost/gil/   (props changed)
   branches/release/boost/graph/   (props changed)
   branches/release/boost/integer/   (props changed)
   branches/release/boost/interprocess/   (props changed)
   branches/release/boost/intrusive/   (props changed)
   branches/release/boost/io/   (props changed)
   branches/release/boost/iostreams/   (props changed)
   branches/release/boost/math/   (props changed)
   branches/release/boost/math_fwd.hpp   (props changed)
   branches/release/boost/msm/   (props changed)
   branches/release/boost/numeric/ublas/   (props changed)
   branches/release/boost/numeric/ublas/functional.hpp   (props changed)
   branches/release/boost/program_options/   (props changed)
   branches/release/boost/property_tree/   (props changed)
   branches/release/boost/python/   (props changed)
   branches/release/boost/range/   (props changed)
   branches/release/boost/regex/   (props changed)
   branches/release/boost/serialization/   (props changed)
   branches/release/boost/signals/   (props changed)
   branches/release/boost/signals2/   (props changed)
   branches/release/boost/signals2.hpp   (props changed)
   branches/release/boost/spirit/   (props changed)
   branches/release/boost/spirit/home/   (props changed)
   branches/release/boost/spirit/home/karma/   (props changed)
   branches/release/boost/spirit/home/support/attributes.hpp   (props changed)
   branches/release/boost/statechart/   (props changed)
   branches/release/boost/system/   (props changed)
   branches/release/boost/thread/   (props changed)
   branches/release/boost/thread.hpp   (props changed)
   branches/release/boost/tr1/   (props changed)
   branches/release/boost/type_traits/   (props changed)
   branches/release/boost/unordered/   (props changed)
   branches/release/boost/utility/   (props changed)
   branches/release/boost/utility/value_init.hpp   (props changed)
   branches/release/boost/uuid/   (props changed)
   branches/release/boost/variant/   (props changed)
   branches/release/boost/version.hpp   (props changed)
   branches/release/boost/wave/   (props changed)
   branches/release/bootstrap.bat   (props changed)
   branches/release/bootstrap.sh   (props changed)
   branches/release/doc/   (props changed)
   branches/release/index.htm   (props changed)
   branches/release/index.html   (props changed)
   branches/release/libs/   (props changed)
   branches/release/libs/algorithm/string/   (props changed)
   branches/release/libs/array/doc/array.xml   (props changed)
   branches/release/libs/array/test/array0.cpp   (props changed)
   branches/release/libs/array/test/array2.cpp   (props changed)
   branches/release/libs/bimap/   (props changed)
   branches/release/libs/config/   (props changed)
   branches/release/libs/filesystem/   (props changed)
   branches/release/libs/functional/hash/   (props changed)
   branches/release/libs/fusion/   (props changed)
   branches/release/libs/graph_parallel/   (props changed)
   branches/release/libs/integer/   (props changed)
   branches/release/libs/interprocess/   (props changed)
   branches/release/libs/intrusive/   (props changed)
   branches/release/libs/iostreams/   (props changed)
   branches/release/libs/libraries.htm   (props changed)
   branches/release/libs/maintainers.txt   (props changed)
   branches/release/libs/math/   (props changed)
   branches/release/libs/math/doc/sf_and_dist/   (props changed)
   branches/release/libs/mpi/build/   (props changed)
   branches/release/libs/mpl/doc/refmanual/broken-compiler-workarounds.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/categorized-index-concepts.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/cfg-no-preprocessed-headers.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/composition-and-argument-binding.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/data-types-concepts.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/data-types-miscellaneous.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/extensible-associative-sequence.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/inserter-class.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/tag-dispatched-metafunction.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/trivial-metafunctions-summary.html   (props changed)
   branches/release/libs/mpl/doc/src/refmanual/Iterators-Iterator.rst   (props changed)
   branches/release/libs/msm/   (props changed)
   branches/release/libs/numeric/ublas/   (props changed)
   branches/release/libs/numeric/ublas/doc/   (props changed)
   branches/release/libs/program_options/   (props changed)
   branches/release/libs/property_tree/   (props changed)
   branches/release/libs/python/   (props changed)
   branches/release/libs/range/   (props changed)
   branches/release/libs/regex/   (props changed)
   branches/release/libs/serialization/   (props changed)
   branches/release/libs/serialization/doc/   (props changed)
   branches/release/libs/serialization/test/   (props changed)
   branches/release/libs/serialization/test/A.cpp   (props changed)
   branches/release/libs/serialization/test/A.hpp   (props changed)
   branches/release/libs/serialization/test/A.ipp   (props changed)
   branches/release/libs/serialization/test/B.hpp   (props changed)
   branches/release/libs/serialization/test/C.hpp   (props changed)
   branches/release/libs/serialization/test/D.hpp   (props changed)
   branches/release/libs/serialization/test/J.hpp   (props changed)
   branches/release/libs/serialization/test/Jamfile.v2   (props changed)
   branches/release/libs/serialization/test/base.hpp   (props changed)
   branches/release/libs/serialization/test/binary_archive.hpp   (props changed)
   branches/release/libs/serialization/test/binary_warchive.hpp   (props changed)
   branches/release/libs/serialization/test/derived2.hpp   (props changed)
   branches/release/libs/serialization/test/dll_a.cpp   (props changed)
   branches/release/libs/serialization/test/dll_base.cpp   (props changed)
   branches/release/libs/serialization/test/dll_derived2.cpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_array_binary_archive.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_base.cpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_base.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_binary_archive.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_derived1.cpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_derived1.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_derived2.cpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_derived2.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_text_archive.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_text_warchive.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_xml_archive.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_xml_warchive.hpp   (props changed)
   branches/release/libs/serialization/test/portable_binary_archive.hpp   (props changed)
   branches/release/libs/serialization/test/test_array.cpp   (props changed)
   branches/release/libs/serialization/test/test_binary.cpp   (props changed)
   branches/release/libs/serialization/test/test_bitset.cpp   (props changed)
   branches/release/libs/serialization/test/test_check.cpp   (props changed)
   branches/release/libs/serialization/test/test_class_info_load.cpp   (props changed)
   branches/release/libs/serialization/test/test_class_info_save.cpp   (props changed)
   branches/release/libs/serialization/test/test_codecvt_null.cpp   (props changed)
   branches/release/libs/serialization/test/test_complex.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_load_fail1.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_load_fail1_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_load_fail2.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_load_fail2_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_load_fail3.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_load_fail3_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_pass.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn1.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn1_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn2.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn2_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn3.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn3_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn4.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn4_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_contained_class.cpp   (props changed)
   branches/release/libs/serialization/test/test_cyclic_ptrs.cpp   (props changed)
   branches/release/libs/serialization/test/test_decl.hpp   (props changed)
   branches/release/libs/serialization/test/test_delete_pointer.cpp   (props changed)
   branches/release/libs/serialization/test/test_deque.cpp   (props changed)
   branches/release/libs/serialization/test/test_derived.cpp   (props changed)
   branches/release/libs/serialization/test/test_derived_class.cpp   (props changed)
   branches/release/libs/serialization/test/test_derived_class_ptr.cpp   (props changed)
   branches/release/libs/serialization/test/test_diamond.cpp   (props changed)
   branches/release/libs/serialization/test/test_diamond_complex.cpp   (props changed)
   branches/release/libs/serialization/test/test_dll_exported.cpp   (props changed)
   branches/release/libs/serialization/test/test_dll_plugin.cpp   (props changed)
   branches/release/libs/serialization/test/test_dll_simple.cpp   (props changed)
   branches/release/libs/serialization/test/test_exported.cpp   (props changed)
   branches/release/libs/serialization/test/test_inclusion.cpp   (props changed)
   branches/release/libs/serialization/test/test_iterators.cpp   (props changed)
   branches/release/libs/serialization/test/test_iterators_base64.cpp   (props changed)
   branches/release/libs/serialization/test/test_list.cpp   (props changed)
   branches/release/libs/serialization/test/test_list_ptrs.cpp   (props changed)
   branches/release/libs/serialization/test/test_map.cpp   (props changed)
   branches/release/libs/serialization/test/test_mi.cpp   (props changed)
   branches/release/libs/serialization/test/test_mult_archive_types.cpp   (props changed)
   branches/release/libs/serialization/test/test_multiple_inheritance.cpp   (props changed)
   branches/release/libs/serialization/test/test_multiple_ptrs.cpp   (props changed)
   branches/release/libs/serialization/test/test_new_operator.cpp   (props changed)
   branches/release/libs/serialization/test/test_no_rtti.cpp   (props changed)
   branches/release/libs/serialization/test/test_non_default_ctor.cpp   (props changed)
   branches/release/libs/serialization/test/test_non_default_ctor2.cpp   (props changed)
   branches/release/libs/serialization/test/test_non_intrusive.cpp   (props changed)
   branches/release/libs/serialization/test/test_not_serializable.cpp   (props changed)
   branches/release/libs/serialization/test/test_null_ptr.cpp   (props changed)
   branches/release/libs/serialization/test/test_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_object.cpp   (props changed)
   branches/release/libs/serialization/test/test_optional.cpp   (props changed)
   branches/release/libs/serialization/test/test_pimpl.cpp   (props changed)
   branches/release/libs/serialization/test/test_polymorphic.cpp   (props changed)
   branches/release/libs/serialization/test/test_polymorphic2.cpp   (props changed)
   branches/release/libs/serialization/test/test_polymorphic2.hpp   (props changed)
   branches/release/libs/serialization/test/test_polymorphic2imp.cpp   (props changed)
   branches/release/libs/serialization/test/test_polymorphic_A.cpp   (props changed)
   branches/release/libs/serialization/test/test_polymorphic_A.hpp   (props changed)
   branches/release/libs/serialization/test/test_primitive.cpp   (props changed)
   branches/release/libs/serialization/test/test_private_base.cpp   (props changed)
   branches/release/libs/serialization/test/test_private_ctor.cpp   (props changed)
   branches/release/libs/serialization/test/test_recursion.cpp   (props changed)
   branches/release/libs/serialization/test/test_registered.cpp   (props changed)
   branches/release/libs/serialization/test/test_reset_object_address.cpp   (props changed)
   branches/release/libs/serialization/test/test_set.cpp   (props changed)
   branches/release/libs/serialization/test/test_shared_ptr.cpp   (props changed)
   branches/release/libs/serialization/test/test_shared_ptr_132.cpp   (props changed)
   branches/release/libs/serialization/test/test_shared_ptr_multi_base.cpp   (props changed)
   branches/release/libs/serialization/test/test_simple_class.cpp   (props changed)
   branches/release/libs/serialization/test/test_simple_class_ptr.cpp   (props changed)
   branches/release/libs/serialization/test/test_singleton.cpp   (props changed)
   branches/release/libs/serialization/test/test_smart_cast.cpp   (props changed)
   branches/release/libs/serialization/test/test_split.cpp   (props changed)
   branches/release/libs/serialization/test/test_static_warning.cpp   (props changed)
   branches/release/libs/serialization/test/test_tools.hpp   (props changed)
   branches/release/libs/serialization/test/test_tracking.cpp   (props changed)
   branches/release/libs/serialization/test/test_traits_fail.cpp   (props changed)
   branches/release/libs/serialization/test/test_traits_pass.cpp   (props changed)
   branches/release/libs/serialization/test/test_unregistered.cpp   (props changed)
   branches/release/libs/serialization/test/test_utf8_codecvt.cpp   (props changed)
   branches/release/libs/serialization/test/test_valarray.cpp   (props changed)
   branches/release/libs/serialization/test/test_variant.cpp   (props changed)
   branches/release/libs/serialization/test/test_vector.cpp   (props changed)
   branches/release/libs/serialization/test/test_void_cast.cpp   (props changed)
   branches/release/libs/serialization/test/text_archive.hpp   (props changed)
   branches/release/libs/serialization/test/text_warchive.hpp   (props changed)
   branches/release/libs/serialization/test/xml_archive.hpp   (props changed)
   branches/release/libs/serialization/test/xml_warchive.hpp   (props changed)
   branches/release/libs/signals/   (props changed)
   branches/release/libs/signals2/   (props changed)
   branches/release/libs/spirit/   (props changed)
   branches/release/libs/spirit/classic/example/   (props changed)
   branches/release/libs/spirit/doc/   (props changed)
   branches/release/libs/spirit/example/   (props changed)
   branches/release/libs/spirit/phoenix/   (props changed)
   branches/release/libs/spirit/test/   (props changed)
   branches/release/libs/spirit/test/qi/optional.cpp   (props changed)
   branches/release/libs/statechart/   (props changed)
   branches/release/libs/static_assert/   (props changed)
   branches/release/libs/system/   (props changed)
   branches/release/libs/thread/   (props changed)
   branches/release/libs/timer/   (props changed)
   branches/release/libs/tr1/   (props changed)
   branches/release/libs/type_traits/   (props changed)
   branches/release/libs/type_traits/doc/   (props changed)
   branches/release/libs/unordered/   (props changed)
   branches/release/libs/utility/   (props changed)
   branches/release/libs/utility/swap.html   (props changed)
   branches/release/libs/utility/swap/test/std_bitset.cpp   (props changed)
   branches/release/libs/utility/value_init.htm   (props changed)
   branches/release/libs/utility/value_init_test.cpp   (props changed)
   branches/release/libs/uuid/   (props changed)
   branches/release/libs/wave/   (props changed)
   branches/release/more/   (props changed)
   branches/release/more/getting_started/   (props changed)
   branches/release/rst.css   (props changed)
   branches/release/status/   (props changed)
   branches/release/status/Jamfile.v2   (props changed)
   branches/release/tools/   (props changed)
   branches/release/tools/bcp/   (props changed)
   branches/release/tools/boostbook/   (props changed)
   branches/release/tools/build/v2/   (props changed)
   branches/release/tools/inspect/   (props changed)
   branches/release/tools/quickbook/   (props changed)
   branches/release/tools/regression/   (props changed)
   branches/release/tools/release/   (props changed)
   branches/release/tools/wave/   (props changed)
Text files modified: 
   branches/release/boost/graph/adjacency_list.hpp                           |   124 ++++++++---------                       
   branches/release/boost/graph/adjacency_matrix.hpp                         |   111 +++++++--------                         
   branches/release/boost/graph/compressed_sparse_row_graph.hpp              |    37 +++-                                    
   branches/release/boost/graph/detail/adjacency_list.hpp                    |    77 +++-------                              
   branches/release/boost/graph/directed_graph.hpp                           |    24 ++-                                     
   branches/release/boost/graph/distributed/adjacency_list.hpp               |     7 +                                       
   branches/release/boost/graph/distributed/compressed_sparse_row_graph.hpp  |     6                                         
   branches/release/boost/graph/edge_list.hpp                                |    40 ++--                                    
   branches/release/boost/graph/graph_traits.hpp                             |    64 ++++++--                                
   branches/release/boost/graph/labeled_graph.hpp                            |     7                                         
   branches/release/boost/graph/properties.hpp                               |    92 +++++++++----                           
   branches/release/boost/graph/reverse_graph.hpp                            |    30 +++-                                    
   branches/release/boost/graph/undirected_graph.hpp                         |    21 ++                                      
   branches/release/boost/graph/vector_as_graph.hpp                          |     6                                         
   branches/release/boost/pending/container_traits.hpp                       |    69 +++++++++                               
   branches/release/boost/pending/property.hpp                               |     2                                         
   branches/release/libs/graph/test/csr_graph_test.cpp                       |     6                                         
   branches/release/libs/graph/test/test_graph.hpp                           |     9 +                                       
   branches/release/libs/graph/test/test_graphs.cpp                          |   269 +++++++++++++++++++++------------------ 
   branches/release/libs/graph/test/test_properties.hpp                      |    78 +++++++---                              
   branches/release/libs/graph/test/typestr.hpp                              |     9                                         
   branches/release/libs/graph_parallel/test/process_group_serialization.cpp |     4                                         
   22 files changed, 639 insertions(+), 453 deletions(-)
Modified: branches/release/boost/graph/adjacency_list.hpp
==============================================================================
--- branches/release/boost/graph/adjacency_list.hpp	(original)
+++ branches/release/boost/graph/adjacency_list.hpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -28,6 +28,8 @@
 #  endif
 #endif
 
+#include <boost/scoped_ptr.hpp>
+
 #include <boost/graph/graph_traits.hpp>
 #include <boost/graph/graph_mutability_traits.hpp>
 #include <boost/graph/graph_selectors.hpp>
@@ -368,37 +370,24 @@
                                        EdgeListS>::vertex_descriptor,
         VertexProperty>
   {
-      public: // TODO Remove me
+      public:
 #if !defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES)
-    typedef typename detail::retag_property_list<vertex_bundle_t,
-                                                 VertexProperty>::retagged
-      maybe_vertex_bundled;
-
-     typedef typename detail::retag_property_list<edge_bundle_t,
-                                                  EdgeProperty>::retagged
-      maybe_edge_bundled;
-#endif
+    typedef typename graph_detail::graph_prop<GraphProperty>::property graph_property_type;
+    typedef typename graph_detail::graph_prop<GraphProperty>::bundle graph_bundled;
 
-  public:
-#if !defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES)
-    typedef typename detail::retag_property_list<vertex_bundle_t,
-                                                 VertexProperty>::type
-      vertex_property_type;
-    typedef typename detail::retag_property_list<edge_bundle_t,
-                                                 EdgeProperty>::type
-      edge_property_type;
-
-    // The types that are actually bundled
-    typedef typename mpl::if_c<(is_same<maybe_vertex_bundled, no_property>::value),
-                           no_vertex_bundle,
-                           maybe_vertex_bundled>::type vertex_bundled;
-    typedef typename mpl::if_c<(is_same<maybe_edge_bundled, no_property>::value),
-                           no_edge_bundle,
-                           maybe_edge_bundled>::type edge_bundled;
+    typedef typename graph_detail::vertex_prop<VertexProperty>::property vertex_property_type;
+    typedef typename graph_detail::vertex_prop<VertexProperty>::bundle vertex_bundled;
+
+    typedef typename graph_detail::edge_prop<EdgeProperty>::property edge_property_type;
+    typedef typename graph_detail::edge_prop<EdgeProperty>::bundle edge_bundled;
 #else
+    typedef GraphProperty graph_property_type;
+    typedef no_graph_bundle graph_bundled;
+
     typedef VertexProperty vertex_property_type;
-    typedef EdgeProperty edge_property_type;
     typedef no_vertex_bundle vertex_bundled;
+
+    typedef EdgeProperty edge_property_type;
     typedef no_edge_bundle edge_bundled;
 #endif
 
@@ -421,44 +410,51 @@
     typedef DirectedS directed_selector;
     typedef EdgeListS edge_list_selector;
 
-    typedef GraphProperty graph_property_type;
 
-    inline adjacency_list(const GraphProperty& p = GraphProperty())
-      : m_property(p) { }
+    adjacency_list(const GraphProperty& p = GraphProperty())
+      : m_property(new graph_property_type(p))
+    { }
+
+    adjacency_list(const adjacency_list& x)
+      : Base(x), m_property(new graph_property_type(*x.m_property))
+    { }
 
-    inline adjacency_list(const adjacency_list& x)
-      : Base(x), m_property(x.m_property) { }
-
-    inline adjacency_list& operator=(const adjacency_list& x) {
+    adjacency_list& operator=(const adjacency_list& x) {
       // TBD: probably should give the strong guarantee
       if (&x != this) {
         Base::operator=(x);
-        m_property = x.m_property;
+
+        // Copy/swap the ptr since we can't just assign it...
+        property_ptr p(new graph_property_type(*x.m_property));
+        m_property.swap(p);
       }
       return *this;
     }
 
     // Required by Mutable Graph
-    inline adjacency_list(vertices_size_type num_vertices,
+    adjacency_list(vertices_size_type num_vertices,
                           const GraphProperty& p = GraphProperty())
-      : Base(num_vertices), m_property(p) { }
+      : Base(num_vertices), m_property(new graph_property_type(p))
+    { }
 
 #if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300
     // Required by Iterator Constructible Graph
     template <class EdgeIterator>
-    inline adjacency_list(EdgeIterator first, EdgeIterator last,
+    adjacency_list(EdgeIterator first, EdgeIterator last,
                           vertices_size_type n,
                           edges_size_type = 0,
                           const GraphProperty& p = GraphProperty())
-      : Base(n, first, last), m_property(p) { }
+      : Base(n, first, last), m_property(new graph_property_type(p))
+    { }
 
     template <class EdgeIterator, class EdgePropertyIterator>
-    inline adjacency_list(EdgeIterator first, EdgeIterator last,
+    adjacency_list(EdgeIterator first, EdgeIterator last,
                           EdgePropertyIterator ep_iter,
                           vertices_size_type n,
                           edges_size_type = 0,
                           const GraphProperty& p = GraphProperty())
-      : Base(n, first, last, ep_iter), m_property(p) { }
+      : Base(n, first, last, ep_iter), m_property(new graph_property_type(p))
+    { }
 #endif
 
     void swap(adjacency_list& x) {
@@ -487,35 +483,39 @@
 
     const edge_bundled& operator[](edge_descriptor e) const
     { return get(edge_bundle, *this)[e]; }
+
+    graph_bundled& operator[](graph_bundle_t)
+    { return get_property(*this); }
+
+    graph_bundled const& operator[](graph_bundle_t) const
+    { return get_property(*this); }
 #endif
 
     //  protected:  (would be protected if friends were more portable)
-    GraphProperty m_property;
+    typedef scoped_ptr<graph_property_type> property_ptr;
+    property_ptr  m_property;
   };
 
-  template <class OEL, class VL, class DirS, class VP,class EP, class GP,
-            class EL, class Tag, class Value>
-  inline void
-  set_property(adjacency_list<OEL,VL,DirS,VP,EP,GP,EL>& g, Tag,
-               const Value& value) {
-    get_property_value(g.m_property, Tag()) = value;;
+#define ADJLIST_PARAMS \
+    typename OEL, typename VL, typename D, typename VP, typename EP, \
+    typename GP, typename EL
+#define ADJLIST adjacency_list<OEL,VL,D,VP,EP,GP,EL>
+
+  template<ADJLIST_PARAMS, typename Tag, typename Value>
+  inline void set_property(ADJLIST& g, Tag, Value const& value) {
+    get_property_value(*g.m_property, Tag()) = value;
   }
 
-  template <class OEL, class VL, class DirS, class VP, class EP, class GP,
-            class Tag, class EL>
-  inline
-  typename graph_property<adjacency_list<OEL,VL,DirS,VP,EP,GP,EL>, Tag>::type&
-  get_property(adjacency_list<OEL,VL,DirS,VP,EP,GP,EL>& g, Tag) {
-    return get_property_value(g.m_property, Tag());
+  template<ADJLIST_PARAMS, typename Tag>
+  inline typename graph_property<ADJLIST, Tag>::type&
+  get_property(ADJLIST& g, Tag) {
+    return get_property_value(*g.m_property, Tag());
   }
 
-  template <class OEL, class VL, class DirS, class VP, class EP, class GP,
-            class Tag, class EL>
-  inline
-  const
-  typename graph_property<adjacency_list<OEL,VL,DirS,VP,EP,GP,EL>, Tag>::type&
-  get_property(const adjacency_list<OEL,VL,DirS,VP,EP,GP,EL>& g, Tag) {
-    return get_property_value(g.m_property, Tag());
+  template<ADJLIST_PARAMS, typename Tag>
+  inline typename graph_property<ADJLIST, Tag>::type const&
+  get_property(ADJLIST const& g, Tag) {
+    return get_property_value(*g.m_property, Tag());
   }
 
   // dwa 09/25/00 - needed to be more explicit so reverse_graph would work.
@@ -598,10 +598,6 @@
 #endif
 
 // Mutability Traits
-#define ADJLIST_PARAMS \
-    typename OEL, typename VL, typename D, typename VP, typename EP, \
-    typename GP, typename EL
-#define ADJLIST adjacency_list<OEL,VL,D,VP,EP,GP,EL>
 template <ADJLIST_PARAMS>
 struct graph_mutability_traits<ADJLIST> {
     typedef mutable_property_graph_tag category;
Modified: branches/release/boost/graph/adjacency_matrix.hpp
==============================================================================
--- branches/release/boost/graph/adjacency_matrix.hpp	(original)
+++ branches/release/boost/graph/adjacency_matrix.hpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -25,7 +25,7 @@
 #include <boost/graph/detail/edge.hpp>
 #include <boost/iterator/iterator_adaptor.hpp>
 #include <boost/iterator/filter_iterator.hpp>
-#include <boost/pending/integer_range.hpp>
+#include <boost/range/irange.hpp>
 #include <boost/graph/properties.hpp>
 #include <boost/tuple/tuple.hpp>
 #include <boost/static_assert.hpp>
@@ -80,36 +80,36 @@
     }
 
 
-
+    // NOTE: These functions collide with the get_property function for
+    // accessing bundled graph properties. Be excplicit when using them.
     template <typename EdgeProperty>
     const EdgeProperty&
-    get_property(const std::pair<bool, EdgeProperty>& stored_edge) {
+    get_edge_property(const std::pair<bool, EdgeProperty>& stored_edge) {
       return stored_edge.second;
     }
     template <typename EdgeProperty>
     EdgeProperty&
-    get_property(std::pair<bool, EdgeProperty>& stored_edge) {
+    get_edge_property(std::pair<bool, EdgeProperty>& stored_edge) {
       return stored_edge.second;
     }
 
     template <typename StoredEdgeProperty, typename EdgeProperty>
     inline void
-    set_property(std::pair<bool, StoredEdgeProperty>& stored_edge,
-                 const EdgeProperty& ep, int) {
+    set_edge_property(std::pair<bool, StoredEdgeProperty>& stored_edge,
+                      const EdgeProperty& ep, int) {
       stored_edge.second = ep;
     }
 
-    inline const no_property& get_property(const char&) {
+    inline const no_property& get_edge_property(const char&) {
       static no_property s_prop;
       return s_prop;
     }
-    inline no_property& get_property(char&) {
+    inline no_property& get_edge_property(char&) {
       static no_property s_prop;
       return s_prop;
     }
     template <typename EdgeProxy, typename EdgeProperty>
-    inline void
-    set_property(EdgeProxy, const EdgeProperty&, ...) {}
+    inline void set_edge_property(EdgeProxy, const EdgeProperty&, ...) {}
 
     //=======================================================================
     // Directed Out Edge Iterator
@@ -155,8 +155,9 @@
         inline EdgeDescriptor
         dereference() const
         {
-            return EdgeDescriptor(get_edge_exists(*this->base(), 0), m_src, m_targ,
-                                  &get_property(*this->base()));
+            return EdgeDescriptor(get_edge_exists(*this->base(), 0),
+                                  m_src, m_targ,
+                                  &get_edge_property(*this->base()));
         }
         VertexDescriptor m_src, m_targ;
         VerticesSizeType m_n;
@@ -211,8 +212,9 @@
         inline EdgeDescriptor
         dereference() const
         {
-            return EdgeDescriptor(get_edge_exists(*this->base(), 0), m_src, m_targ,
-                                  &get_property(*this->base()));
+            return EdgeDescriptor(get_edge_exists(*this->base(), 0),
+                                  m_src, m_targ,
+                                  &get_edge_property(*this->base()));
         }
         MatrixIter m_last;
         VertexDescriptor m_src, m_targ;
@@ -276,10 +278,9 @@
         inline EdgeDescriptor
         dereference() const
         {
-            return EdgeDescriptor(
-                get_edge_exists(*this->base(), 0), m_src, m_targ
-              , &get_property(*this->base())
-            );
+            return EdgeDescriptor(get_edge_exists(*this->base(), 0),
+                                  m_src, m_targ,
+                                  &get_edge_property(*this->base()));
         }
 
         VertexDescriptor m_src, m_inc, m_targ;
@@ -343,10 +344,9 @@
         inline EdgeDescriptor
         dereference() const
         {
-            return EdgeDescriptor(
-                     get_edge_exists(*this->base(), 0), m_targ, m_src
-              , &get_property(*this->base())
-            );
+            return EdgeDescriptor(get_edge_exists(*this->base(), 0),
+                                  m_targ, m_src,
+                                  &get_edge_property(*this->base()));
         }
 
         VertexDescriptor m_src, m_inc, m_targ;
@@ -418,10 +418,9 @@
         inline EdgeDescriptor
         dereference() const
         {
-            return EdgeDescriptor(
-                get_edge_exists(
-                    *this->base(), 0), m_src, m_targ, &get_property(*this->base())
-            );
+            return EdgeDescriptor(get_edge_exists(*this->base(), 0),
+                                  m_src, m_targ,
+                                  &get_edge_property(*this->base()));
         }
 
         MatrixIter m_start;
@@ -485,34 +484,25 @@
     BOOST_STATIC_ASSERT(!(is_same<Directed, bidirectionalS>::value));
 #endif
 
-#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
-    typedef typename detail::retag_property_list<vertex_bundle_t, VertexProperty>::type
-      vertex_property_type;
-    typedef typename detail::retag_property_list<edge_bundle_t, EdgeProperty>::type
-      edge_property_type;
-
-  private:
-    typedef typename detail::retag_property_list<vertex_bundle_t, VertexProperty>::retagged
-      maybe_vertex_bundled;
+#if !defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES)
+    typedef typename graph_detail::graph_prop<GraphProperty>::property graph_property_type;
+    typedef typename graph_detail::graph_prop<GraphProperty>::bundle graph_bundled;
 
-    typedef typename detail::retag_property_list<edge_bundle_t, EdgeProperty>::retagged
-      maybe_edge_bundled;
+    typedef typename graph_detail::vertex_prop<VertexProperty>::property vertex_property_type;
+    typedef typename graph_detail::vertex_prop<VertexProperty>::bundle vertex_bundled;
 
-  public:
-    // The types that are actually bundled
-    typedef typename mpl::if_c<(is_same<maybe_vertex_bundled, no_property>::value),
-                           no_vertex_bundle,
-                           maybe_vertex_bundled>::type vertex_bundled;
-    typedef typename mpl::if_c<(is_same<maybe_edge_bundled, no_property>::value),
-                           no_edge_bundle,
-                           maybe_edge_bundled>::type edge_bundled;
+    typedef typename graph_detail::edge_prop<EdgeProperty>::property edge_property_type;
+    typedef typename graph_detail::edge_prop<EdgeProperty>::bundle edge_bundled;
 #else
-    typedef EdgeProperty     edge_property_type;
-    typedef VertexProperty   vertex_property_type;
+    typedef GraphProperty graph_property_type;
+    typedef no_graph_bundle graph_bundled;
+
+    typedef VertexProperty vertex_property_type;
     typedef no_vertex_bundle vertex_bundled;
-    typedef no_edge_bundle   edge_bundled;
+
+    typedef EdgeProperty edge_property_type;
+    typedef no_edge_bundle edge_bundled;
 #endif
-    typedef GraphProperty    graph_property_type;
 
   public: // should be private
     typedef typename mpl::if_<typename has_property<edge_property_type>::type,
@@ -660,6 +650,12 @@
 
     const edge_bundled& operator[](edge_descriptor e) const
     { return get(edge_bundle, *this)[e]; }
+
+    graph_bundled& operator[](graph_bundle_t)
+    { return get_property(*this); }
+
+    const graph_bundled& operator[](graph_bundle_t) const
+    { return get_property(*this); }
 #endif
 
     //private: if friends worked, these would be private
@@ -689,7 +685,7 @@
     VertexList m_vertex_set;
     std::vector<vertex_property_type> m_vertex_properties;
     size_type m_num_edges;
-    GraphProperty m_property;
+    graph_property_type m_property;
   };
 
   //=========================================================================
@@ -704,7 +700,7 @@
   {
     bool exists = detail::get_edge_exists(g.get_edge(u,v), 0);
     typename adjacency_matrix<D,VP,EP,GP,A>::edge_descriptor
-      e(exists, u, v, &detail::get_property(g.get_edge(u,v)));
+      e(exists, u, v, &detail::get_edge_property(g.get_edge(u,v)));
     return std::make_pair(e, exists);
   }
 
@@ -937,14 +933,14 @@
       edge_descriptor;
     if (detail::get_edge_exists(g.get_edge(u,v), 0) == false) {
       ++(g.m_num_edges);
-      detail::set_property(g.get_edge(u,v), EP(ep), 0);
+      detail::set_edge_property(g.get_edge(u,v), EP(ep), 0);
       detail::set_edge_exists(g.get_edge(u,v), true, 0);
       return std::make_pair
-        (edge_descriptor(true, u, v, &detail::get_property(g.get_edge(u,v))),
+        (edge_descriptor(true, u, v, &detail::get_edge_property(g.get_edge(u,v))),
          true);
     } else
       return std::make_pair
-        (edge_descriptor(true, u, v, &detail::get_property(g.get_edge(u,v))),
+        (edge_descriptor(true, u, v, &detail::get_edge_property(g.get_edge(u,v))),
          false);
   }
   // O(1)
@@ -1050,8 +1046,7 @@
 
   template <typename D, typename VP, typename EP, typename GP, typename A,
             typename Tag>
-  inline
-  typename graph_property<adjacency_matrix<D,VP,EP,GP,A>, Tag>::type&
+  inline typename graph_property<adjacency_matrix<D,VP,EP,GP,A>, Tag>::type&
   get_property(adjacency_matrix<D,VP,EP,GP,A>& g, Tag)
   {
       return get_property_value(g.m_property, Tag());
@@ -1059,9 +1054,7 @@
 
   template <typename D, typename VP, typename EP, typename GP, typename A,
             typename Tag>
-  inline
-  const
-  typename graph_property<adjacency_matrix<D,VP,EP,GP,A>, Tag>::type&
+  inline const typename graph_property<adjacency_matrix<D,VP,EP,GP,A>, Tag>::type&
   get_property(const adjacency_matrix<D,VP,EP,GP,A>& g, Tag)
   {
       return get_property_value(g.m_property, Tag());
Modified: branches/release/boost/graph/compressed_sparse_row_graph.hpp
==============================================================================
--- branches/release/boost/graph/compressed_sparse_row_graph.hpp	(original)
+++ branches/release/boost/graph/compressed_sparse_row_graph.hpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -38,6 +38,7 @@
 #include <boost/iterator/iterator_facade.hpp>
 #include <boost/mpl/if.hpp>
 #include <boost/graph/graph_selectors.hpp>
+#include <boost/graph/properties.hpp>
 #include <boost/static_assert.hpp>
 #include <boost/functional/hash.hpp>
 #include <boost/utility.hpp>
@@ -170,7 +171,7 @@
  * Vertex and EdgeIndex should be unsigned integral types and should
  * specialize numeric_limits.
  */
-template<typename Directed = directedS, 
+template<typename Directed = directedS,
          typename VertexProperty = no_property,
          typename EdgeProperty = no_property,
          typename GraphProperty = no_property,
@@ -194,13 +195,14 @@
 
  public:
   // For Property Graph
-  typedef GraphProperty graph_property_type;
+  typedef typename graph_detail::graph_prop<GraphProperty>::property graph_property_type;
+  typedef typename graph_detail::graph_prop<GraphProperty>::bundle graph_bundled;
 
   typedef detail::compressed_sparse_row_structure<EdgeProperty, Vertex, EdgeIndex> forward_type;
 
  public:
   /* At this time, the compressed sparse row graph can only be used to
-   * create directed and bidirectional graphs. In the future, 
+   * create directed and bidirectional graphs. In the future,
    * undirected CSR graphs will also be supported.
    */
   // BOOST_STATIC_ASSERT((is_same<Directed, directedS>::value));
@@ -623,7 +625,7 @@
     m_forward.add_edges_sorted_internal(first_sorted, last_sorted, detail::default_construct_iterator<edge_bundled>(), global_to_local);
   }
 
-  template <typename BidirectionalIteratorOrig, typename EPIterOrig, 
+  template <typename BidirectionalIteratorOrig, typename EPIterOrig,
             typename GlobalToLocal>
   void
   add_edges_sorted_internal_global(
@@ -637,7 +639,7 @@
   // Add edges from a range of (source, target) pairs that are unsorted
   template <typename InputIterator, typename GlobalToLocal>
   inline void
-  add_edges_internal(InputIterator first, InputIterator last, 
+  add_edges_internal(InputIterator first, InputIterator last,
                      const GlobalToLocal& global_to_local) {
     typedef compressed_sparse_row_graph Graph;
     typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_t;
@@ -711,6 +713,13 @@
   const edge_push_back_type& operator[](const edge_descriptor& v) const
   { return m_forward.m_edge_properties[get(edge_index, *this, v)]; }
 
+  // Directly access a graph bundle
+  graph_bundled& operator[](graph_bundle_t)
+  { return get_property(*this); }
+
+  const graph_bundled& operator[](graph_bundle_t) const
+  { return get_property(*this); }
+
   // private: non-portable, requires friend templates
   inherited_vertex_properties&       vertex_properties()       {return *this;}
   const inherited_vertex_properties& vertex_properties() const {return *this;}
@@ -737,7 +746,9 @@
 
  public:
   // For Property Graph
-  typedef GraphProperty graph_property_type;
+  typedef typename graph_detail::graph_prop<GraphProperty>::property graph_property_type;
+  typedef typename graph_detail::graph_prop<GraphProperty>::bundle graph_bundled;
+  // typedef GraphProperty graph_property_type;
 
   typedef detail::compressed_sparse_row_structure<EdgeProperty, Vertex, EdgeIndex> forward_type;
   typedef EdgeIndex /* typename boost::mpl::if_c<boost::is_same<EdgeProperty, boost::no_property>, boost::no_property, EdgeIndex> */ backward_edge_property;
@@ -990,7 +1001,7 @@
     m_forward.add_edges_sorted_internal(first_sorted, last_sorted, detail::default_construct_iterator<edge_bundled>(), global_to_local);
   }
 
-  template <typename BidirectionalIteratorOrig, typename EPIterOrig, 
+  template <typename BidirectionalIteratorOrig, typename EPIterOrig,
             typename GlobalToLocal>
   void
   add_edges_sorted_internal_global(
@@ -1004,7 +1015,7 @@
   // Add edges from a range of (source, target) pairs that are unsorted
   template <typename InputIterator, typename GlobalToLocal>
   inline void
-  add_edges_internal(InputIterator first, InputIterator last, 
+  add_edges_internal(InputIterator first, InputIterator last,
                      const GlobalToLocal& global_to_local) {
     typedef compressed_sparse_row_graph Graph;
     typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_t;
@@ -1098,7 +1109,7 @@
 
 template<BOOST_DIR_CSR_GRAPH_TEMPLATE_PARMS>
 inline Vertex
-add_vertex(BOOST_DIR_CSR_GRAPH_TYPE& g, 
+add_vertex(BOOST_DIR_CSR_GRAPH_TYPE& g,
            typename BOOST_DIR_CSR_GRAPH_TYPE::vertex_bundled const& p) {
   Vertex old_num_verts_plus_one = g.m_forward.m_rowstart.size();
   g.m_forward.m_rowstart.push_back(g.m_forward.m_rowstart.back());
@@ -1108,7 +1119,7 @@
 
 template<BOOST_BIDIR_CSR_GRAPH_TEMPLATE_PARMS>
 inline Vertex
-add_vertex(BOOST_BIDIR_CSR_GRAPH_TYPE& g, 
+add_vertex(BOOST_BIDIR_CSR_GRAPH_TYPE& g,
            typename BOOST_BIDIR_CSR_GRAPH_TYPE::vertex_bundled const& p) {
   Vertex old_num_verts_plus_one = g.m_forward.m_rowstart.size();
   g.m_forward.m_rowstart.push_back(g.m_forward.m_rowstart.back());
@@ -1160,7 +1171,7 @@
       EPIterOrig ep_iter_sorted,
       const GlobalToLocal& global_to_local,
       BOOST_DIR_CSR_GRAPH_TYPE& g) {
-    g.add_edges_sorted_internal_global(first_sorted, last_sorted, ep_iter_sorted, 
+    g.add_edges_sorted_internal_global(first_sorted, last_sorted, ep_iter_sorted,
                                        global_to_local);
   }
 
@@ -1180,7 +1191,7 @@
   template <BOOST_DIR_CSR_GRAPH_TEMPLATE_PARMS, typename InputIterator,
             typename GlobalToLocal>
   inline void
-  add_edges_global(InputIterator first, InputIterator last, 
+  add_edges_global(InputIterator first, InputIterator last,
                    const GlobalToLocal& global_to_local, BOOST_DIR_CSR_GRAPH_TYPE& g) {
     g.add_edges_internal(first, last, global_to_local);
   }
@@ -1303,7 +1314,7 @@
 // Extra, common functions
 template<BOOST_CSR_GRAPH_TEMPLATE_PARMS>
 inline typename graph_traits<BOOST_CSR_GRAPH_TYPE>::vertex_descriptor
-vertex(typename graph_traits<BOOST_CSR_GRAPH_TYPE>::vertex_descriptor i, 
+vertex(typename graph_traits<BOOST_CSR_GRAPH_TYPE>::vertex_descriptor i,
        const BOOST_CSR_GRAPH_TYPE&)
 {
   return i;
Modified: branches/release/boost/graph/detail/adjacency_list.hpp
==============================================================================
--- branches/release/boost/graph/detail/adjacency_list.hpp	(original)
+++ branches/release/boost/graph/detail/adjacency_list.hpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -17,7 +17,7 @@
 #include <boost/detail/workaround.hpp>
 #include <boost/operators.hpp>
 #include <boost/property_map/property_map.hpp>
-#include <boost/pending/integer_range.hpp>
+#include <boost/range/irange.hpp>
 #include <boost/graph/graph_traits.hpp>
 #include <memory>
 #include <algorithm>
@@ -993,10 +993,19 @@
       typename Config::OutEdgeList& el = g.out_edge_list(u);
       typename Config::OutEdgeList::iterator
         ei = el.begin(), ei_end = el.end();
-      for (; ei != ei_end; ++ei) {
-        detail::erase_from_incidence_list
-          (g.out_edge_list((*ei).get_target()), u, Cat());
-        g.m_edges.erase((*ei).get_iter());
+      for (; ei != ei_end; /* Increment below */ ) {
+        bool is_self_loop = (*ei).get_target() == u;
+        // Don't erase from our own incidence list in the case of a self-loop
+        // since we're clearing it anyway.
+        if (!is_self_loop) {
+          detail::erase_from_incidence_list
+            (g.out_edge_list((*ei).get_target()), u, Cat());
+          typename Config::OutEdgeList::iterator ei_copy = ei;
+          ++ei;
+          if (!is_self_loop) g.m_edges.erase((*ei_copy).get_iter());
+        } else {
+          ++ei;
+        }
       }
       g.out_edge_list(u).clear();
     }
@@ -1505,51 +1514,6 @@
 
       typedef typename Config::global_edgelist_selector
         global_edgelist_selector;
-
-      //    protected:
-
-      // The edge_dispatch() functions should be static, but
-      // Borland gets confused about constness.
-
-      // O(E/V)
-      inline std::pair<edge_descriptor,bool>
-      edge_dispatch(const AdjList& g,
-                    vertex_descriptor u, vertex_descriptor v,
-                    boost::allow_parallel_edge_tag) const
-      {
-        bool found;
-        const typename Config::OutEdgeList& el = g.out_edge_list(u);
-        typename Config::OutEdgeList::const_iterator
-          i = std::find_if(el.begin(), el.end(),
-                           detail::target_is<vertex_descriptor>(v));
-        found = (i != g.out_edge_list(u).end());
-        if (found)
-          return std::make_pair(edge_descriptor(u, v, &(*i).get_property()),
-                                true);
-        else
-          return std::make_pair(edge_descriptor(u, v, 0), false);
-      }
-      // O(log(E/V))
-      inline std::pair<edge_descriptor,bool>
-      edge_dispatch(const AdjList& g,
-                    vertex_descriptor u, vertex_descriptor v,
-                    boost::disallow_parallel_edge_tag) const
-      {
-        bool found;
-        /* According to the standard, this should be iterator, not const_iterator,
-           but the VC++ std::set::find() const returns const_iterator.
-           And since iterator should be convertible to const_iterator, the
-           following should work everywhere. -Jeremy */
-        typename Config::OutEdgeList::const_iterator
-          i = g.out_edge_list(u).find(StoredEdge(v)),
-          end = g.out_edge_list(u).end();
-        found = (i != end);
-        if (found)
-          return std::make_pair(edge_descriptor(u, v, &(*i).get_property()),
-                                true);
-        else
-          return std::make_pair(edge_descriptor(u, v, 0), false);
-      }
     };
 
     template <class Config, class Base>
@@ -1630,9 +1594,16 @@
          const adj_list_helper<Config, Base>& g_)
     {
       typedef typename Config::graph_type Graph;
-      typedef typename Config::edge_parallel_category Cat;
-      const Graph& g = static_cast<const Graph&>(g_);
-      return g_.edge_dispatch(g, u, v, Cat());
+      typedef typename Config::StoredEdge StoredEdge;
+      const Graph& cg = static_cast<const Graph&>(g_);
+      typedef typename Config::out_edge_iterator out_edge_iterator;
+      const typename Config::OutEdgeList& el = cg.out_edge_list(u);
+      typename Config::OutEdgeList::const_iterator it = graph_detail::
+        find(el, StoredEdge(v));
+      return std::make_pair(
+               typename Config::edge_descriptor
+                     (u, v, (it == el.end() ? 0 : &(*it).get_property())),
+               (it != el.end()));
     }
 
     template <class Config, class Base>
Modified: branches/release/boost/graph/directed_graph.hpp
==============================================================================
--- branches/release/boost/graph/directed_graph.hpp	(original)
+++ branches/release/boost/graph/directed_graph.hpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -33,9 +33,13 @@
 class directed_graph
 {
 public:
-    typedef typename graph_detail::vertex_prop<VertexProp>::type vertex_property_type;
+    typedef typename graph_detail::graph_prop<GraphProp>::property graph_property_type;
+    typedef typename graph_detail::graph_prop<GraphProp>::bundle graph_bundled;
+
+    typedef typename graph_detail::vertex_prop<VertexProp>::property vertex_property_type;
     typedef typename graph_detail::vertex_prop<VertexProp>::bundle vertex_bundled;
-    typedef typename graph_detail::edge_prop<EdgeProp>::type edge_property_type;
+
+    typedef typename graph_detail::edge_prop<EdgeProp>::property edge_property_type;
     typedef typename graph_detail::edge_prop<EdgeProp>::bundle edge_bundled;
 
 private:
@@ -58,9 +62,6 @@
     typedef typename graph_type::directed_selector directed_selector;
 
 public:
-    typedef directed_graph_tag graph_tag;
-    typedef typename graph_type::graph_property_type graph_property_type;
-
     // more commonly used graph types
     typedef typename graph_type::stored_vertex stored_vertex;
     typedef typename graph_type::vertices_size_type vertices_size_type;
@@ -77,6 +78,7 @@
     typedef typename graph_type::adjacency_iterator adjacency_iterator;
 
     // miscellaneous types
+    typedef directed_graph_tag graph_tag;
     typedef typename graph_type::directed_category directed_category;
     typedef typename graph_type::edge_parallel_category edge_parallel_category;
     typedef typename graph_type::traversal_category traversal_category;
@@ -283,6 +285,12 @@
 
     edge_bundled const& operator[](edge_descriptor e) const
     { return m_graph[e]; }
+
+    graph_bundled& operator[](graph_bundle_t)
+    { return get_property(*this); }
+
+    graph_bundled const& operator[](graph_bundle_t) const
+    { return get_property(*this); }
 #endif
 
     // Graph concepts
@@ -345,14 +353,12 @@
 // IncidenceGraph concepts
 template <DIRECTED_GRAPH_PARAMS>
 inline typename DIRECTED_GRAPH::vertex_descriptor
-source(typename DIRECTED_GRAPH::edge_descriptor e,
-    DIRECTED_GRAPH const& g)
+source(typename DIRECTED_GRAPH::edge_descriptor e, DIRECTED_GRAPH const& g)
 { return source(e, g.impl()); }
 
 template <DIRECTED_GRAPH_PARAMS>
 inline typename DIRECTED_GRAPH::vertex_descriptor
-target(typename DIRECTED_GRAPH::edge_descriptor e,
-    DIRECTED_GRAPH const& g)
+target(typename DIRECTED_GRAPH::edge_descriptor e, DIRECTED_GRAPH const& g)
 { return target(e, g.impl()); }
 
 template <DIRECTED_GRAPH_PARAMS>
Modified: branches/release/boost/graph/distributed/adjacency_list.hpp
==============================================================================
--- branches/release/boost/graph/distributed/adjacency_list.hpp	(original)
+++ branches/release/boost/graph/distributed/adjacency_list.hpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -1371,6 +1371,7 @@
     typedef typename inherited::graph_property_type graph_property_type;
     typedef typename inherited::vertex_bundled vertex_bundled;
     typedef typename inherited::edge_bundled edge_bundled;
+    typedef typename inherited::graph_bundled graph_bundled;
 
     typedef typename container_gen<edge_list_selector, edge_descriptor>::type
       local_edge_list_type;
@@ -1713,6 +1714,12 @@
       return base()[e.local];
     }
 
+    graph_bundled& operator[](graph_bundle_t)
+    { return get_property(*this); }
+
+    graph_bundled const& operator[](graph_bundle_t) const
+    { return get_property(*this); }
+
     template<typename OStreamConstructibleArchive>
     void save(std::string const& filename) const;
 
Modified: branches/release/boost/graph/distributed/compressed_sparse_row_graph.hpp
==============================================================================
--- branches/release/boost/graph/distributed/compressed_sparse_row_graph.hpp	(original)
+++ branches/release/boost/graph/distributed/compressed_sparse_row_graph.hpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -129,14 +129,20 @@
 
   // -----------------------------------------------------------------
   // Workarounds
+  // NOTE: This graph type does not have old-style graph properties. It only
+  // accepts bundles.
   typedef no_property vertex_property_type;
   typedef no_property edge_property_type;
+  typedef no_property graph_property_type;
   typedef typename mpl::if_<is_void<VertexProperty>,
                             void****,
                             VertexProperty>::type vertex_bundled;
   typedef typename mpl::if_<is_void<EdgeProperty>,
                             void****,
                             EdgeProperty>::type edge_bundled;
+  typedef typename mpl::if_<is_void<GraphProperty>,
+                            void****,
+                            GraphProperty>::type graph_bundled;
 
   // -----------------------------------------------------------------
   // Useful types
Modified: branches/release/boost/graph/edge_list.hpp
==============================================================================
--- branches/release/boost/graph/edge_list.hpp	(original)
+++ branches/release/boost/graph/edge_list.hpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -15,7 +15,7 @@
 #include <boost/config.hpp>
 #include <boost/mpl/if.hpp>
 #include <boost/mpl/bool.hpp>
-#include <boost/pending/integer_range.hpp>
+#include <boost/range/irange.hpp>
 #include <boost/graph/graph_traits.hpp>
 #include <boost/graph/properties.hpp>
 
@@ -37,7 +37,7 @@
   // If the iterators are random access, then Graph::edge_descriptor
   // is of Integral type, otherwise it is a struct, though it is
   // convertible to an Integral type.
-  // 
+  //
 
   struct edge_list_tag { };
 
@@ -129,7 +129,7 @@
       typedef type const_type;
     };
   };
-  template <>  
+  template <>
   struct edge_property_selector<edge_list_tag> {
     typedef edge_list_edge_property_selector type;
   };
@@ -137,7 +137,7 @@
   template <class G, class EI, class T, class D>
   typename property_map< edge_list_impl<G,EI,T,D>, edge_index_t>::type
   get(edge_index_t, const edge_list_impl<G,EI,T,D>&) {
-    typedef typename property_map< edge_list_impl<G,EI,T,D>, 
+    typedef typename property_map< edge_list_impl<G,EI,T,D>,
       edge_index_t>::type EdgeIndexMap;
     return EdgeIndexMap();
   }
@@ -180,7 +180,7 @@
     const G& g = static_cast<const G&>(g_);
     typedef typename edge_list_impl_ra<G,EI,T,D>::edge_iterator edge_iterator;
     return std::make_pair(edge_iterator(0), edge_iterator(g._last - g._first));
-  }    
+  }
   template <class G, class EI, class T, class D>
   typename edge_list_impl_ra<G,EI,T,D>::vertex_descriptor
   source(typename edge_list_impl_ra<G,EI,T,D>::edge_descriptor e,
@@ -217,22 +217,22 @@
       typedef type const_type;
     };
   };
-  template <>  
+  template <>
   struct edge_property_selector<edge_list_ra_tag> {
     typedef edge_list_ra_edge_property_selector type;
   };
   template <class G, class EI, class T, class D>
-  inline 
+  inline
   typename property_map< edge_list_impl_ra<G,EI,T,D>, edge_index_t>::type
   get(edge_index_t, const edge_list_impl_ra<G,EI,T,D>&) {
-    typedef typename property_map< edge_list_impl_ra<G,EI,T,D>, 
+    typedef typename property_map< edge_list_impl_ra<G,EI,T,D>,
       edge_index_t>::type EdgeIndexMap;
     return EdgeIndexMap();
   }
 
   template <class G, class EI, class T, class D>
   inline D
-  get(edge_index_t, const edge_list_impl_ra<G,EI,T,D>&, 
+  get(edge_index_t, const edge_list_impl_ra<G,EI,T,D>&,
       typename edge_list_impl_ra<G,EI,T,D>::edge_descriptor e) {
     return e;
   }
@@ -241,31 +241,31 @@
   // Some helper classes for determining if the iterators are random access
   template <class Cat>
   struct is_random {
-    enum { RET = false }; 
-    typedef mpl::false_ type; 
+    enum { RET = false };
+    typedef mpl::false_ type;
   };
   template <>
-  struct is_random<std::random_access_iterator_tag> { 
-    enum { RET = true }; typedef mpl::true_ type; 
+  struct is_random<std::random_access_iterator_tag> {
+    enum { RET = true }; typedef mpl::true_ type;
   };
 
   // The edge_list class conditionally inherits from one of the
   // above two classes.
 
-  template <class EdgeIter, 
+  template <class EdgeIter,
 #if !defined BOOST_NO_STD_ITERATOR_TRAITS
             class T = typename std::iterator_traits<EdgeIter>::value_type,
             class D = typename std::iterator_traits<EdgeIter>::difference_type,
             class Cat = typename std::iterator_traits<EdgeIter>::iterator_category>
 #else
             class T,
-            class D, 
+            class D,
             class Cat>
 #endif
   class edge_list
     : public mpl::if_< typename is_random<Cat>::type,
                     edge_list_impl_ra< edge_list<EdgeIter,T,D,Cat>, EdgeIter,T,D>,
-                    edge_list_impl< edge_list<EdgeIter,T,D,Cat>, EdgeIter,T,D> 
+                    edge_list_impl< edge_list<EdgeIter,T,D,Cat>, EdgeIter,T,D>
              >::type
   {
   public:
@@ -275,12 +275,12 @@
     typedef std::size_t edges_size_type;
     typedef std::size_t vertices_size_type;
     typedef std::size_t degree_size_type;
-    edge_list(EdgeIter first, EdgeIter last) : _first(first), _last(last) { 
+    edge_list(EdgeIter first, EdgeIter last) : _first(first), _last(last) {
       m_num_edges = std::distance(first, last);
     }
     edge_list(EdgeIter first, EdgeIter last, edges_size_type E)
-      : _first(first), _last(last), m_num_edges(E) { }  
-    
+      : _first(first), _last(last), m_num_edges(E) { }
+
     EdgeIter _first, _last;
     edges_size_type m_num_edges;
   };
@@ -298,7 +298,7 @@
     return edge_list<EdgeIter>(first, last);
   }
 #endif
-  
+
 } /* namespace boost */
 
 #endif /* BOOST_GRAPH_EDGE_LIST_HPP */
Modified: branches/release/boost/graph/graph_traits.hpp
==============================================================================
--- branches/release/boost/graph/graph_traits.hpp	(original)
+++ branches/release/boost/graph/graph_traits.hpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -218,30 +218,36 @@
     typedef boost::forward_traversal_tag multi_pass_input_iterator_tag;
 
     template <typename G>
-    struct edge_property_type {
-        typedef typename G::edge_property_type type;
+    struct graph_property_type {
+      typedef typename G::graph_property_type type;
     };
     template <typename G>
-    struct vertex_property_type {
-        typedef typename G::vertex_property_type type;
+    struct edge_property_type {
+      typedef typename G::edge_property_type type;
     };
     template <typename G>
-    struct graph_property_type {
-        typedef typename G::graph_property_type type;
+    struct vertex_property_type {
+      typedef typename G::vertex_property_type type;
     };
 
     struct no_bundle { };
+    struct no_graph_bundle : no_bundle { };
     struct no_vertex_bundle : no_bundle { };
     struct no_edge_bundle : no_bundle { };
 
     template<typename G>
+    struct graph_bundle_type {
+      typedef typename G::graph_bundled type;
+    };
+
+    template<typename G>
     struct vertex_bundle_type {
-        typedef typename G::vertex_bundled type;
+      typedef typename G::vertex_bundled type;
     };
 
     template<typename G>
     struct edge_bundle_type {
-        typedef typename G::edge_bundled type;
+      typedef typename G::edge_bundled type;
     };
 
     namespace graph { namespace detail {
@@ -258,12 +264,11 @@
     } } // namespace graph::detail
 
     namespace graph_detail {
-        // A helper metafunction for determining whether or not a type is
-        // bundled.
-        template <typename T>
-        struct is_no_bundle
-            : mpl::bool_<is_convertible<T, no_bundle>::value>
-        { };
+      // A helper metafunction for determining whether or not a type is
+      // bundled.
+      template <typename T>
+      struct is_no_bundle : mpl::bool_<is_convertible<T, no_bundle>::value>
+      { };
     } // namespace graph_detail
 
     /** @name Graph Property Traits
@@ -272,24 +277,43 @@
      * edges.
      */
     //@{
-    template <typename Graph>
-    struct has_vertex_property
-        : mpl::not_<
-            typename detail::is_no_property<typename vertex_property_type<Graph>::type>
+    template<typename Graph>
+    struct has_graph_property
+      : mpl::not_<
+        typename detail::is_no_property<
+          typename graph_property_type<Graph>::type
         >::type
+      >::type
+    { };
+
+    template<typename Graph>
+    struct has_bundled_graph_property
+      : mpl::not_<
+        graph_detail::is_no_bundle<typename graph_bundle_type<Graph>::type>
+      >
     { };
+
     template <typename Graph>
-    struct has_edge_property
+    struct has_vertex_property
         : mpl::not_<
-            typename detail::is_no_property<typename edge_property_type<Graph>::type>
+            typename detail::is_no_property<typename vertex_property_type<Graph>::type>
         >::type
     { };
+
     template <typename Graph>
     struct has_bundled_vertex_property
         : mpl::not_<
             graph_detail::is_no_bundle<typename vertex_bundle_type<Graph>::type>
         >
     { };
+
+    template <typename Graph>
+    struct has_edge_property
+        : mpl::not_<
+            typename detail::is_no_property<typename edge_property_type<Graph>::type>
+        >::type
+    { };
+
     template <typename Graph>
     struct has_bundled_edge_property
         : mpl::not_<
Modified: branches/release/boost/graph/labeled_graph.hpp
==============================================================================
--- branches/release/boost/graph/labeled_graph.hpp	(original)
+++ branches/release/boost/graph/labeled_graph.hpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -278,10 +278,13 @@
     typedef typename graph_traits<graph_type>::edge_iterator edge_iterator;
     typedef typename graph_traits<graph_type>::edges_size_type edges_size_type;
 
-    typedef typename graph_type::vertex_property_type vertex_property_type;
-    typedef typename graph_type::edge_property_type edge_property_type;
     typedef typename graph_type::graph_property_type graph_property_type;
+    typedef typename graph_type::graph_bundled graph_bundled;
+
+    typedef typename graph_type::vertex_property_type vertex_property_type;
     typedef typename graph_type::vertex_bundled vertex_bundled;
+
+    typedef typename graph_type::edge_property_type edge_property_type;
     typedef typename graph_type::edge_bundled edge_bundled;
 
     typedef typename Base::label_type label_type;
Modified: branches/release/boost/graph/properties.hpp
==============================================================================
--- branches/release/boost/graph/properties.hpp	(original)
+++ branches/release/boost/graph/properties.hpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -126,6 +126,7 @@
   BOOST_DEF_PROPERTY(graph, visitor);
 
   // These tags are used for property bundles
+  BOOST_DEF_PROPERTY(graph, bundle);
   BOOST_DEF_PROPERTY(vertex, bundle);
   BOOST_DEF_PROPERTY(edge, bundle);
 
@@ -199,6 +200,7 @@
     };
     template <class Graph, class PropertyTag>
     class vertex_property_map {
+    public:
       typedef typename vertex_property_type<Graph>::type Property;
       typedef typename graph_tag_or_void<Graph>::type graph_tag;
       typedef typename vertex_property_selector<graph_tag>::type Selector;
@@ -242,7 +244,7 @@
 
   template <class Graph, class Property>
   struct property_map {
-  private:
+  // private:
     typedef typename property_kind<Property>::type Kind;
     typedef typename detail::property_map_kind_selector<Kind>::type Selector;
     typedef typename Selector::template bind_<Graph, Property> Bind;
@@ -263,8 +265,9 @@
   template <class Graph, class Property>
   class graph_property {
   public:
-    typedef typename property_value<typename Graph::graph_property_type,
-      Property>::type type;
+    typedef typename property_value<
+      typename Graph::graph_property_type, Property
+    >::type type;
   };
 
   template <class Graph>
@@ -432,44 +435,71 @@
 // These metafunctions help implement the process of determining the vertex
 // and edge properties of a graph.
 namespace graph_detail {
-    template <typename Retag>
+    template<typename Retag>
     struct retagged_property {
         typedef typename Retag::type type;
     };
 
-    template <typename Retag, typename With, typename Without>
+    // Search the normalized PropList (as returned by retagged<>::type) for
+    // the given bundle. Return the type error if no such bundle can be found.
+    template <typename PropList, typename Bundle>
     struct retagged_bundle {
-        typedef typename mpl::if_<
-            is_same<typename Retag::retagged, no_property>,
-            Without,
-            With
-        >::type type;
-    };
-
-    template <typename Prop>
-    struct vertex_prop {
-    private:
-        typedef detail::retag_property_list<vertex_bundle_t, Prop> Retag;
-    public:
-        typedef typename retagged_property<Retag>::type type;
-        typedef typename retagged_bundle<
-            Retag, Prop, no_vertex_bundle
-        >::type bundle;
+      typedef typename property_value<PropList, Bundle>::type Value;
+      typedef typename mpl::if_<
+        is_same<Value, detail::error_property_not_found>, no_bundle, Value
+      >::type type;
     };
 
-    template <typename Prop>
-    struct edge_prop {
-//     private:
-        typedef detail::retag_property_list<edge_bundle_t, Prop> Retag;
+    template<typename Prop, typename Bundle>
+    class normal_property {
+      // Normalize the property into a property list.
+      typedef detail::retag_property_list<Bundle, Prop> List;
     public:
-        typedef typename Retag::retagged retagged;
-        typedef typename retagged_property<Retag>::type type;
-        typedef typename retagged_bundle<
-            Retag, Prop, no_edge_bundle
-        >::type bundle;
-    };
+      // Extract the normalized property and bundle types.
+      typedef typename retagged_property<List>::type property;
+      typedef typename retagged_bundle<property, Bundle>::type bundle;
+    };
+
+    template<typename Prop>
+    struct graph_prop : normal_property<Prop, graph_bundle_t>
+    { };
+
+    template<typename Prop>
+    struct vertex_prop : normal_property<Prop, vertex_bundle_t>
+    { };
+
+    template<typename Prop>
+    struct edge_prop : normal_property<Prop, edge_bundle_t>
+    { };
 } // namespace graph_detail
 
+// NOTE: These functions are declared, but never defined since they need to
+// be overloaded by graph implementations. However, we need them to be
+// declared for the functions below.
+template<typename Graph, typename Tag>
+typename graph_property<Graph, graph_bundle_t>::type&
+get_property(Graph& g, Tag);
+
+template<typename Graph, typename Tag>
+typename graph_property<Graph, graph_bundle_t>::type const&
+get_property(Graph const& g, Tag);
+
+#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
+// NOTE: This operation is a simple adaptor over the overloaded get_property
+// operations.
+template<typename Graph>
+inline typename graph_property<Graph, graph_bundle_t>::type&
+get_property(Graph& g) {
+  return get_property(g, graph_bundle);
+}
+
+template<typename Graph>
+inline typename graph_property<Graph, graph_bundle_t>::type const&
+get_property(Graph const& g) {
+  return get_property(g, graph_bundle);
+}
+#endif
+
 } // namespace boost
 
 #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
Modified: branches/release/boost/graph/reverse_graph.hpp
==============================================================================
--- branches/release/boost/graph/reverse_graph.hpp	(original)
+++ branches/release/boost/graph/reverse_graph.hpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -79,19 +79,33 @@
 
     typedef reverse_graph_tag graph_tag;
 
+    // Graph, vertex, and edge properties
+    typedef typename graph_property_type<base_type>::type graph_property_type;
+    typedef typename graph_bundle_type<base_type>::type graph_bundled;
+
+    typedef typename vertex_property_type<base_type>::type vertex_property_type;
+    typedef typename vertex_bundle_type<base_type>::type vertex_bundled;
+
+    typedef typename edge_property_type<base_type>::type edge_property_type;
+    typedef typename edge_bundle_type<base_type>::type edge_bundled;
+
 #ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
     // Bundled properties support
     template<typename Descriptor>
-    typename graph::detail::bundled_result<BidirectionalGraph, 
-                                           Descriptor>::type&
+    typename graph::detail::bundled_result<BidirectionalGraph, Descriptor>::type&
     operator[](Descriptor x)
     { return m_g[x]; }
 
     template<typename Descriptor>
-    typename graph::detail::bundled_result<BidirectionalGraph, 
-                                           Descriptor>::type const&
+    typename graph::detail::bundled_result<BidirectionalGraph, Descriptor>::type const&
     operator[](Descriptor x) const
     { return m_g[x]; }
+
+    graph_bundled& operator[](graph_bundle_t)
+    { return get_property(*this); }
+
+    graph_bundled const& operator[](graph_bundle_t) const
+    { return get_property(*this); }
 #endif // BOOST_GRAPH_NO_BUNDLED_PROPERTIES
 
     static vertex_descriptor null_vertex()
@@ -116,11 +130,11 @@
 
 #ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES
   template<typename Graph, typename GraphRef>
-  struct vertex_bundle_type<reverse_graph<Graph, GraphRef> > 
+  struct vertex_bundle_type<reverse_graph<Graph, GraphRef> >
     : vertex_bundle_type<Graph> { };
 
   template<typename Graph, typename GraphRef>
-  struct edge_bundle_type<reverse_graph<Graph, GraphRef> > 
+  struct edge_bundle_type<reverse_graph<Graph, GraphRef> >
     : edge_bundle_type<Graph> { };
 #endif // BOOST_GRAPH_NO_BUNDLED_PROPERTIES
 
@@ -194,7 +208,7 @@
 }
 
 template <class BidirectionalGraph, class GRef>
-inline std::pair<typename graph_traits<BidirectionalGraph>::edge_descriptor, 
+inline std::pair<typename graph_traits<BidirectionalGraph>::edge_descriptor,
                  bool>
 edge(const typename graph_traits<BidirectionalGraph>::vertex_descriptor u,
      const typename graph_traits<BidirectionalGraph>::vertex_descriptor v,
@@ -318,7 +332,7 @@
 template<typename BidirectionalGraph, typename GRef, typename Tag,
          typename Value>
 inline void
-set_property(const reverse_graph<BidirectionalGraph,GRef>& g, Tag tag, 
+set_property(const reverse_graph<BidirectionalGraph,GRef>& g, Tag tag,
              const Value& value)
 {
   set_property(g.m_g, tag, value);
Modified: branches/release/boost/graph/undirected_graph.hpp
==============================================================================
--- branches/release/boost/graph/undirected_graph.hpp	(original)
+++ branches/release/boost/graph/undirected_graph.hpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -33,17 +33,22 @@
  */
 template <
     typename VertexProp = no_property,
-    typename EdgeProp= no_property,
+    typename EdgeProp = no_property,
     typename GraphProp = no_property>
 class undirected_graph
 {
 public:
-    typedef typename graph_detail::vertex_prop<VertexProp>::type vertex_property_type;
+    typedef typename graph_detail::graph_prop<GraphProp>::property graph_property_type;
+    typedef typename graph_detail::graph_prop<GraphProp>::bundle graph_bundled;
+
+    typedef typename graph_detail::vertex_prop<VertexProp>::property vertex_property_type;
     typedef typename graph_detail::vertex_prop<VertexProp>::bundle vertex_bundled;
-    typedef typename graph_detail::edge_prop<EdgeProp>::type edge_property_type;
+
+    typedef typename graph_detail::edge_prop<EdgeProp>::property edge_property_type;
     typedef typename graph_detail::edge_prop<EdgeProp>::bundle edge_bundled;
 
 private:
+    // Embed indices into the vertex type.
     typedef property<vertex_index_t, unsigned, vertex_property_type> vertex_property;
     typedef property<edge_index_t, unsigned, edge_property_type> edge_property;
 public:
@@ -62,9 +67,6 @@
     typedef typename graph_type::directed_selector directed_selector;
 
 public:
-    typedef undirected_graph_tag graph_tag;
-    typedef typename graph_type::graph_property_type graph_property_type;
-
     // more commonly used graph types
     typedef typename graph_type::stored_vertex stored_vertex;
     typedef typename graph_type::vertices_size_type vertices_size_type;
@@ -81,6 +83,7 @@
     typedef typename graph_type::adjacency_iterator adjacency_iterator;
 
     // miscellaneous types
+    typedef undirected_graph_tag graph_tag;
     typedef typename graph_type::directed_category directed_category;
     typedef typename graph_type::edge_parallel_category edge_parallel_category;
     typedef typename graph_type::traversal_category traversal_category;
@@ -276,6 +279,12 @@
 
     edge_bundled const& operator[](edge_descriptor e) const
     { return m_graph[e]; }
+
+    graph_bundled& operator[](graph_bundle_t)
+    { return get_property(*this); }
+
+    graph_bundled const& operator[](graph_bundle_t) const
+    { return get_property(*this); }
 #endif
 
     // Graph concepts
Modified: branches/release/boost/graph/vector_as_graph.hpp
==============================================================================
--- branches/release/boost/graph/vector_as_graph.hpp	(original)
+++ branches/release/boost/graph/vector_as_graph.hpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -19,8 +19,8 @@
 #include <vector>
 #include <cstddef>
 #include <boost/iterator.hpp>
+#include <boost/range/irange.hpp>
 #include <boost/graph/graph_traits.hpp>
-#include <boost/pending/integer_range.hpp>
 #include <boost/property_map/property_map.hpp>
 #include <boost/graph/properties.hpp>
 #include <algorithm>
@@ -315,14 +315,14 @@
   };
 
   template<typename EdgeList, typename Allocator>
-  identity_property_map 
+  identity_property_map
   get(vertex_index_t, const std::vector<EdgeList, Allocator>&)
   {
     return identity_property_map();
   }
 
   template<typename EdgeList, typename Allocator>
-  identity_property_map 
+  identity_property_map
   get(vertex_index_t, std::vector<EdgeList, Allocator>&)
   {
     return identity_property_map();
Modified: branches/release/boost/pending/container_traits.hpp
==============================================================================
--- branches/release/boost/pending/container_traits.hpp	(original)
+++ branches/release/boost/pending/container_traits.hpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -458,7 +458,67 @@
     return push_dispatch(c, v, container_category(c));
   }
 
+  // Find
+  template <class Container, class Value>
+  typename Container::iterator
+  find_dispatch(Container& c,
+                const Value& value,
+                container_tag)
+  {
+    return std::find(c.begin(), c.end(), value);
+  }
+
+  template <class AssociativeContainer, class Value>
+  typename AssociativeContainer::iterator
+  find_dispatch(AssociativeContainer& c,
+                const Value& value,
+                associative_container_tag)
+  {
+    return c.find(value);
+  }
+
+  template <class Container, class Value>
+  typename Container::iterator
+  find(Container& c,
+       const Value& value)
+  {
+    return find_dispatch(c, value,
+                         graph_detail::container_category(c));
+  }
+
+  // Find (const versions)
+  template <class Container, class Value>
+  typename Container::const_iterator
+  find_dispatch(const Container& c,
+                const Value& value,
+                container_tag)
+  {
+    return std::find(c.begin(), c.end(), value);
+  }
+
+  template <class AssociativeContainer, class Value>
+  typename AssociativeContainer::const_iterator
+  find_dispatch(const AssociativeContainer& c,
+                const Value& value,
+                associative_container_tag)
+  {
+    return c.find(value);
+  }
+
+  template <class Container, class Value>
+  typename Container::const_iterator
+  find(const Container& c,
+       const Value& value)
+  {
+    return find_dispatch(c, value,
+                         graph_detail::container_category(c));
+  }
+
   // Equal range
+#if 0
+  // Make the dispatch fail if c is not an Associative Container (and thus
+  // doesn't have equal_range unless it is sorted, which we cannot check
+  // statically and is not typically true for BGL's uses of this function).
   template <class Container,
             class LessThanComparable>
   std::pair<typename Container::iterator, typename Container::iterator>
@@ -469,21 +529,22 @@
     // c must be sorted for std::equal_range to behave properly.
     return std::equal_range(c.begin(), c.end(), value);
   }
+#endif
 
-  template <class AssociativeContainer, class LessThanComparable>
+  template <class AssociativeContainer, class Value>
   std::pair<typename AssociativeContainer::iterator,
             typename AssociativeContainer::iterator>
   equal_range_dispatch(AssociativeContainer& c,
-                       const LessThanComparable& value,
+                       const Value& value,
                        associative_container_tag)
   {
     return c.equal_range(value);
   }
 
-  template <class Container, class LessThanComparable>
+  template <class Container, class Value>
   std::pair<typename Container::iterator, typename Container::iterator>
   equal_range(Container& c,
-              const LessThanComparable& value)
+              const Value& value)
   {
     return equal_range_dispatch(c, value,
                                 graph_detail::container_category(c));
Modified: branches/release/boost/pending/property.hpp
==============================================================================
--- branches/release/boost/pending/property.hpp	(original)
+++ branches/release/boost/pending/property.hpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -150,7 +150,7 @@
         typedef FinalType retagged;
     };
 
-    // A final base case of the retag_propert_list, this will terminate a
+    // A final base case of the retag_property_list, this will terminate a
     // properly structured list.
     template<typename FinalTag>
     struct retag_property_list<FinalTag, no_property>
Modified: branches/release/libs/graph/test/csr_graph_test.cpp
==============================================================================
--- branches/release/libs/graph/test/csr_graph_test.cpp	(original)
+++ branches/release/libs/graph/test/csr_graph_test.cpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -39,12 +39,12 @@
 typedef boost::adjacency_list<> GraphT;
 typedef boost::erdos_renyi_iterator<boost::minstd_rand, GraphT> ERGen;
 
-struct VertexData 
+struct VertexData
 {
   int index;
 };
 
-struct EdgeData 
+struct EdgeData
 {
   int index_e;
 };
@@ -194,7 +194,7 @@
 
   // Check constructing a graph from iterators
   CSRGraphT g3(boost::edges_are_sorted,
-               boost::make_transform_iterator(edges(g2).first,
+              boost::make_transform_iterator(edges(g2).first,
                                               boost::detail::make_edge_to_index_pair(g2)),
                boost::make_transform_iterator(edges(g2).second,
                                               boost::detail::make_edge_to_index_pair(g2)),
Modified: branches/release/libs/graph/test/test_graph.hpp
==============================================================================
--- branches/release/libs/graph/test/test_graph.hpp	(original)
+++ branches/release/libs/graph/test/test_graph.hpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -60,6 +60,12 @@
  * generator to define property maps.
  */
 //@{
+// This is really just a place holder to make sure that bundled graph
+// properties actually work. There are no semantics to this type.
+struct GraphBundle {
+  int value;
+};
+
 struct VertexBundle {
     VertexBundle() : value() { }
     VertexBundle(int n) : value(n) { }
@@ -105,6 +111,7 @@
     // Test constrution and vertex list.
     build_graph(g, can_add_vertex, is_labeled);
     build_property_graph(g, can_add_vertex, is_labeled);
+
     test_vertex_list_graph(g);
 
     // Collect the vertices for an easy method of "naming" them.
@@ -118,7 +125,7 @@
 
     // Test connection and edge list
     connect_graph(g, verts, is_labeled);
-//     connect_property_graph(g, verts, is_labeld);
+    // connect_property_graph(g, verts, is_labeld);
     test_edge_list_graph(g);
 
     // Test properties
Modified: branches/release/libs/graph/test/test_graphs.cpp
==============================================================================
--- branches/release/libs/graph/test/test_graphs.cpp	(original)
+++ branches/release/libs/graph/test/test_graphs.cpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -1,4 +1,4 @@
-// (C) Copyright 2009 Andrew Sutton
+// (C) Copyright 2009-2010 Andrew Sutton
 //
 // Use, modification and distribution are subject to the
 // Boost Software License, Version 1.0 (See accompanying file
@@ -24,130 +24,147 @@
 
 int main()
 {
-    // Bootstrap all of the tests by declaring a kind graph and  asserting some
-    // basic properties about it.
-    {
-        typedef undirected_graph<VertexBundle, EdgeBundle> Graph;
-        BOOST_META_ASSERT(is_undirected_graph<Graph>);
-        BOOST_META_ASSERT(is_multigraph<Graph>);
-        BOOST_META_ASSERT(is_incidence_graph<Graph>);
-        BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
-        BOOST_META_ASSERT(has_vertex_property<Graph>);
-        BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
-        BOOST_META_ASSERT(has_edge_property<Graph>);
-        BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
-        BOOST_META_ASSERT(is_mutable_graph<Graph>);
-        BOOST_META_ASSERT(is_mutable_property_graph<Graph>);
-        Graph g;
-        test_graph(g);
-    }
-    {
-        typedef directed_graph<VertexBundle, EdgeBundle> Graph;
-        BOOST_META_ASSERT(is_directed_graph<Graph>);
-        BOOST_META_ASSERT(is_multigraph<Graph>);
-        BOOST_META_ASSERT(is_incidence_graph<Graph>);
-        BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
-        BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
-        BOOST_META_ASSERT(has_vertex_property<Graph>);
-        BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
-        BOOST_META_ASSERT(has_edge_property<Graph>);
-        BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
-        BOOST_META_ASSERT(is_mutable_graph<Graph>);
-        BOOST_META_ASSERT(is_mutable_property_graph<Graph>);
-        Graph g;
-        test_graph(g);
-    }
-    {
-        typedef adjacency_list<vecS, vecS, undirectedS, VertexBundle, EdgeBundle> Graph;
-        BOOST_META_ASSERT(is_undirected_graph<Graph>);
-        BOOST_META_ASSERT(is_multigraph<Graph>);
-        BOOST_META_ASSERT(is_incidence_graph<Graph>);
-        BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
-        BOOST_META_ASSERT(has_vertex_property<Graph>);
-        BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
-        BOOST_META_ASSERT(has_edge_property<Graph>);
-        BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
-        BOOST_META_ASSERT(is_add_only_property_graph<Graph>);
-        Graph g;
-        test_graph(g);
-    }
-    {
-        typedef adjacency_list<vecS, vecS, directedS, VertexBundle, EdgeBundle> Graph;
-        Graph g;
-        BOOST_META_ASSERT(is_directed_graph<Graph>);
-        BOOST_META_ASSERT(is_multigraph<Graph>);
-        BOOST_META_ASSERT(is_incidence_graph<Graph>);
-        BOOST_META_ASSERT(!is_bidirectional_graph<Graph>);
-        BOOST_META_ASSERT(is_directed_unidirectional_graph<Graph>);
-        BOOST_META_ASSERT(has_vertex_property<Graph>);
-        BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
-        BOOST_META_ASSERT(has_edge_property<Graph>);
-        BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
-        BOOST_META_ASSERT(is_add_only_property_graph<Graph>);
-        test_graph(g);
-    }
-    {
-        // Common bidi adjlist
-        typedef adjacency_list<vecS, vecS, bidirectionalS, VertexBundle, EdgeBundle> Graph;
-        BOOST_META_ASSERT(is_directed_graph<Graph>);
-        BOOST_META_ASSERT(is_multigraph<Graph>);
-        BOOST_META_ASSERT(is_incidence_graph<Graph>);
-        BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
-        BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
-        BOOST_META_ASSERT(has_vertex_property<Graph>);
-        BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
-        BOOST_META_ASSERT(has_edge_property<Graph>);
-        BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
-        BOOST_META_ASSERT(is_add_only_property_graph<Graph>);
-        Graph g;
-        test_graph(g);
-    }
-    {
-        // Same as above, but testing VL==listS
-        typedef adjacency_list<vecS, listS, bidirectionalS, VertexBundle, EdgeBundle> Graph;
-        BOOST_META_ASSERT(is_directed_graph<Graph>);
-        BOOST_META_ASSERT(is_multigraph<Graph>);
-        BOOST_META_ASSERT(is_incidence_graph<Graph>);
-        BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
-        BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
-        BOOST_META_ASSERT(has_vertex_property<Graph>);
-        BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
-        BOOST_META_ASSERT(has_edge_property<Graph>);
-        BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
-        BOOST_META_ASSERT(is_mutable_property_graph<Graph>);
-        Graph g;
-        test_graph(g);
-    }
-    {
-        // TODO: What other kinds of graphs do we have here...
-        typedef adjacency_matrix<directedS, VertexBundle, EdgeBundle> Graph;
-        BOOST_META_ASSERT(is_directed_graph<Graph>);
-        BOOST_META_ASSERT(!is_multigraph<Graph>);
-        BOOST_META_ASSERT(has_vertex_property<Graph>);
-        BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
-        BOOST_META_ASSERT(has_edge_property<Graph>);
-        BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
-        BOOST_META_ASSERT(is_mutable_edge_graph<Graph>);
-        BOOST_META_ASSERT(is_mutable_edge_property_graph<Graph>);
-        Graph g(N);
-        test_graph(g);
-    }
-    {
-        typedef labeled_graph<directed_graph<>, unsigned> Graph;
-        BOOST_META_ASSERT(is_directed_graph<Graph>);
-        BOOST_META_ASSERT(is_multigraph<Graph>);
-        BOOST_META_ASSERT(is_incidence_graph<Graph>);
-        BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
-        BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
-        BOOST_META_ASSERT(is_labeled_mutable_property_graph<Graph>);
-        BOOST_META_ASSERT(is_labeled_graph<Graph>);
-        BOOST_META_ASSERT(!has_vertex_property<Graph>);
-        BOOST_META_ASSERT(!has_bundled_vertex_property<Graph>);
-        BOOST_META_ASSERT(!has_edge_property<Graph>);
-        BOOST_META_ASSERT(!has_bundled_edge_property<Graph>);
-        BOOST_META_ASSERT(is_labeled_mutable_graph<Graph>);
-        Graph g;
-        test_graph(g);
-    }
+  // Bootstrap all of the tests by declaring a kind graph and  asserting some
+  // basic properties about it.
+  {
+      typedef undirected_graph<VertexBundle, EdgeBundle, GraphBundle> Graph;
+      BOOST_META_ASSERT(is_undirected_graph<Graph>);
+      BOOST_META_ASSERT(is_multigraph<Graph>);
+      BOOST_META_ASSERT(is_incidence_graph<Graph>);
+      BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
+      BOOST_META_ASSERT(has_vertex_property<Graph>);
+      BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+      BOOST_META_ASSERT(has_edge_property<Graph>);
+      BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+      BOOST_META_ASSERT(is_mutable_graph<Graph>);
+      BOOST_META_ASSERT(is_mutable_property_graph<Graph>);
+      Graph g;
+      test_graph(g);
+  }
+  {
+      typedef directed_graph<VertexBundle, EdgeBundle, GraphBundle> Graph;
+      BOOST_META_ASSERT(is_directed_graph<Graph>);
+      BOOST_META_ASSERT(is_multigraph<Graph>);
+      BOOST_META_ASSERT(is_incidence_graph<Graph>);
+      BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
+      BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
+      BOOST_META_ASSERT(has_vertex_property<Graph>);
+      BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+      BOOST_META_ASSERT(has_edge_property<Graph>);
+      BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+      BOOST_META_ASSERT(is_mutable_graph<Graph>);
+      BOOST_META_ASSERT(is_mutable_property_graph<Graph>);
+      Graph g;
+      test_graph(g);
+  }
+  {
+      typedef adjacency_list<vecS, vecS, undirectedS, VertexBundle, EdgeBundle, GraphBundle> Graph;
+      BOOST_META_ASSERT(is_undirected_graph<Graph>);
+      BOOST_META_ASSERT(is_multigraph<Graph>);
+      BOOST_META_ASSERT(is_incidence_graph<Graph>);
+      BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
+      BOOST_META_ASSERT(has_vertex_property<Graph>);
+      BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+      BOOST_META_ASSERT(has_edge_property<Graph>);
+      BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+      BOOST_META_ASSERT(is_add_only_property_graph<Graph>);
+      Graph g;
+      test_graph(g);
+  }
+  {
+      typedef adjacency_list<vecS, vecS, directedS, VertexBundle, EdgeBundle, GraphBundle> Graph;
+      Graph g;
+      BOOST_META_ASSERT(is_directed_graph<Graph>);
+      BOOST_META_ASSERT(is_multigraph<Graph>);
+      BOOST_META_ASSERT(is_incidence_graph<Graph>);
+      BOOST_META_ASSERT(!is_bidirectional_graph<Graph>);
+      BOOST_META_ASSERT(is_directed_unidirectional_graph<Graph>);
+      BOOST_META_ASSERT(has_vertex_property<Graph>);
+      BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+      BOOST_META_ASSERT(has_edge_property<Graph>);
+      BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+      BOOST_META_ASSERT(is_add_only_property_graph<Graph>);
+      test_graph(g);
+  }
+  {
+      // Common bidi adjlist
+      typedef adjacency_list<vecS, vecS, bidirectionalS, VertexBundle, EdgeBundle, GraphBundle> Graph;
+      BOOST_META_ASSERT(is_directed_graph<Graph>);
+      BOOST_META_ASSERT(is_multigraph<Graph>);
+      BOOST_META_ASSERT(is_incidence_graph<Graph>);
+      BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
+      BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
+      BOOST_META_ASSERT(has_vertex_property<Graph>);
+      BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+      BOOST_META_ASSERT(has_edge_property<Graph>);
+      BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+      BOOST_META_ASSERT(is_add_only_property_graph<Graph>);
+      Graph g;
+      test_graph(g);
+  }
+  {
+      // Same as above, but testing VL==listS
+      typedef adjacency_list<vecS, listS, bidirectionalS, VertexBundle, EdgeBundle, GraphBundle> Graph;
+      BOOST_META_ASSERT(is_directed_graph<Graph>);
+      BOOST_META_ASSERT(is_multigraph<Graph>);
+      BOOST_META_ASSERT(is_incidence_graph<Graph>);
+      BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
+      BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
+      BOOST_META_ASSERT(has_vertex_property<Graph>);
+      BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+      BOOST_META_ASSERT(has_edge_property<Graph>);
+      BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+      BOOST_META_ASSERT(is_mutable_property_graph<Graph>);
+      Graph g;
+      test_graph(g);
+  }
+  {
+      typedef adjacency_matrix<directedS, VertexBundle, EdgeBundle, GraphBundle> Graph;
+      BOOST_META_ASSERT(is_directed_graph<Graph>);
+      BOOST_META_ASSERT(!is_multigraph<Graph>);
+      BOOST_META_ASSERT(has_vertex_property<Graph>);
+      BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+      BOOST_META_ASSERT(has_edge_property<Graph>);
+      BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+      BOOST_META_ASSERT(is_mutable_edge_graph<Graph>);
+      BOOST_META_ASSERT(is_mutable_edge_property_graph<Graph>);
+      Graph g(N);
+      test_graph(g);
+  }
+  {
+      typedef adjacency_matrix<directedS, VertexBundle, EdgeBundle> Graph;
+      BOOST_META_ASSERT(is_directed_graph<Graph>);
+      BOOST_META_ASSERT(!is_multigraph<Graph>);
+      BOOST_META_ASSERT(has_vertex_property<Graph>);
+      BOOST_META_ASSERT(has_bundled_vertex_property<Graph>);
+      BOOST_META_ASSERT(has_edge_property<Graph>);
+      BOOST_META_ASSERT(has_bundled_edge_property<Graph>);
+      BOOST_META_ASSERT(is_mutable_edge_graph<Graph>);
+      BOOST_META_ASSERT(is_mutable_edge_property_graph<Graph>);
+      Graph g(N);
+      test_graph(g);
+  }
+  /*
+  {
+      typedef labeled_graph<directed_graph<>, unsigned> Graph;
+      BOOST_META_ASSERT(is_directed_graph<Graph>);
+      BOOST_META_ASSERT(is_multigraph<Graph>);
+      BOOST_META_ASSERT(is_incidence_graph<Graph>);
+      BOOST_META_ASSERT(is_bidirectional_graph<Graph>);
+      BOOST_META_ASSERT(is_directed_bidirectional_graph<Graph>);
+      BOOST_META_ASSERT(is_labeled_mutable_property_graph<Graph>);
+      BOOST_META_ASSERT(is_labeled_graph<Graph>);
+      BOOST_META_ASSERT(!has_vertex_property<Graph>);
+      BOOST_META_ASSERT(!has_bundled_vertex_property<Graph>);
+      BOOST_META_ASSERT(!has_edge_property<Graph>);
+      BOOST_META_ASSERT(!has_bundled_edge_property<Graph>);
+      BOOST_META_ASSERT(is_labeled_mutable_graph<Graph>);
+      Graph g;
+      test_graph(g);
+  }
+  */
+
+  // TODO: What other kinds of graphs do we have here...
+
 }
 
Modified: branches/release/libs/graph/test/test_properties.hpp
==============================================================================
--- branches/release/libs/graph/test/test_properties.hpp	(original)
+++ branches/release/libs/graph/test/test_properties.hpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -7,6 +7,30 @@
 #ifndef TEST_PROPERTIES_HPP
 #define TEST_PROPERTIES_HPP
 
+template<typename T> T const& as_const(T& x) { return x; }
+template<typename T> void ignore(T const&) { }
+
+template<typename Graph>
+void test_graph_bundle(Graph& g, boost::mpl::true_) {
+  using namespace boost;
+  std::cout << "...test_graph_bundle\n";
+
+  typedef typename graph_property_type<Graph>::type Property;
+  typedef typename graph_bundle_type<Graph>::type Bundle;
+
+  GraphBundle& b1 = g[graph_bundle];
+  GraphBundle& b2 = get_property(g);
+  ignore(b1); ignore(b2);
+
+  GraphBundle const& cb1 = as_const(g)[graph_bundle];
+  GraphBundle const& cb2 = get_property(g);
+  ignore(cb1); ignore(cb2);
+}
+
+template<typename Graph>
+void test_graph_bundle(Graph& g, boost::mpl::false_)
+{ }
+
 /** @name Test Vertex Bundle
  * Exercise the vertex bundle. Note that this is expected to be of type
  * VertexBundle.
@@ -14,30 +38,28 @@
 //@{
 template <typename Graph, typename VertexSet>
 void test_vertex_bundle(Graph& g, VertexSet const& verts, boost::mpl::true_) {
-    using namespace boost;
-    BOOST_CONCEPT_ASSERT((GraphConcept<Graph>));
-    typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
-    BOOST_CONCEPT_ASSERT((PropertyGraphConcept<Graph, Vertex, vertex_bundle_t>));
-
-    std::cout << "...test_vertex_bundle\n";
+  using namespace boost;
+  BOOST_CONCEPT_ASSERT((GraphConcept<Graph>));
+  typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
+  BOOST_CONCEPT_ASSERT((PropertyGraphConcept<Graph, Vertex, vertex_bundle_t>));
 
     // Test bundling via the graph object on the lollipop vertex.
-    Vertex v = verts[5];
-    VertexBundle& b = g[v];
-    b.value = 10;
-    BOOST_ASSERT(g[v].value == 10);
-
-    // Test bundling via the property map.
-    typedef typename property_map<Graph, int VertexBundle::*>::type BundleMap;
-    BOOST_CONCEPT_ASSERT((ReadWritePropertyMapConcept<BundleMap, Vertex>));
-    BundleMap map = get(&VertexBundle::value, g);
-    put(map, v, 5);
-    BOOST_ASSERT(get(map, v) == 5);
-
-    typedef typename property_map<Graph, int VertexBundle::*>::const_type ConstBundleMap;
-    BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept<ConstBundleMap, Vertex>));
-    ConstBundleMap cmap = get(&VertexBundle::value, (Graph const&)g);
-    BOOST_ASSERT(get(cmap, v) == 5);
+  Vertex v = verts[5];
+  VertexBundle& b = g[v];
+  b.value = 10;
+  BOOST_ASSERT(g[v].value == 10);
+
+  // Test bundling via the property map.
+  typedef typename property_map<Graph, int VertexBundle::*>::type BundleMap;
+  BOOST_CONCEPT_ASSERT((ReadWritePropertyMapConcept<BundleMap, Vertex>));
+  BundleMap map = get(&VertexBundle::value, g);
+  put(map, v, 5);
+  BOOST_ASSERT(get(map, v) == 5);
+
+  typedef typename property_map<Graph, int VertexBundle::*>::const_type ConstBundleMap;
+  BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept<ConstBundleMap, Vertex>));
+  ConstBundleMap cmap = get(&VertexBundle::value, (Graph const&)g);
+  BOOST_ASSERT(get(cmap, v) == 5);
 }
 
 template <typename Graph, typename VertexSet>
@@ -90,11 +112,15 @@
  */
 template <typename Graph, typename VertexSet>
 void test_properties(Graph& g, VertexSet const& verts) {
-    typename boost::has_bundled_vertex_property<Graph>::type vertex_bundled;
-    typename boost::has_bundled_edge_property<Graph>::type edge_bundled;
+  using namespace boost;
 
-    test_vertex_bundle(g, verts, vertex_bundled);
-    test_edge_bundle(g, verts, edge_bundled);
+  typename has_bundled_graph_property<Graph>::type graph_bundled;
+  typename has_bundled_vertex_property<Graph>::type vertex_bundled;
+  typename has_bundled_edge_property<Graph>::type edge_bundled;
+
+  test_graph_bundle(g, graph_bundled);
+  test_vertex_bundle(g, verts, vertex_bundled);
+  test_edge_bundle(g, verts, edge_bundled);
 }
 //@}
 
Modified: branches/release/libs/graph/test/typestr.hpp
==============================================================================
--- branches/release/libs/graph/test/typestr.hpp	(original)
+++ branches/release/libs/graph/test/typestr.hpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -15,6 +15,8 @@
 #include <cxxabi.h>
 #endif
 
+template<typename T> struct type_name { };
+
 /**
  * Return a string that describes the type of the given template parameter.
  * The type name depends on the results of the typeid operator.
@@ -22,16 +24,15 @@
  * @todo Rewrite this so that demangle will dynamically allocate the memory.
  */
 template <typename T>
-std::string typestr()
-{
+std::string typestr() {
 #if defined(__GNUC__)
     std::size_t const BUFSIZE = 8192;
     std::size_t n = BUFSIZE;
     char buf[BUFSIZE];
-    abi::__cxa_demangle(typeid(T).name(), buf, &n, 0);
+    abi::__cxa_demangle(typeid(type_name<T>).name(), buf, &n, 0);
     return std::string(buf, ::strlen(buf));
 #else
-    return typeid(T).name();
+    return typeid(type_name<T>).name();
 #endif
 }
 
Modified: branches/release/libs/graph_parallel/test/process_group_serialization.cpp
==============================================================================
--- branches/release/libs/graph_parallel/test/process_group_serialization.cpp	(original)
+++ branches/release/libs/graph_parallel/test/process_group_serialization.cpp	2010-10-05 13:42:47 EDT (Tue, 05 Oct 2010)
@@ -7,6 +7,10 @@
 //  Authors: Douglas Gregor
 //           Andrew Lumsdaine
 
+// FIXME: Including because of a missing header in the serialization library.
+// Patch sent to list...
+#include <cassert>
+
 #include <boost/graph/use_mpi.hpp>
 #include <boost/config.hpp>
 #include <boost/throw_exception.hpp>